現象
在第5行出現了,undefined reference to `memcpy’
1 static void printf_x(unsigned int val)
2{
3 char buffer[32];
4 const char lut[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
5 char *p = buffer;
6 while (val || p == buffer) {
7 *(p++) = lut[val & 0x0000000F];
8 val = val >>4 ;
9 }
10 while (p != buffer)
11 printf_c(*(--p));
12}
本質原因
編譯器會隱式地調用memcpy`函數,尤其是涉及到內存復制或者結構體操作時。
在你的代碼中,雖然看起來沒有顯式調用 memcpy 函數,但可能有一些間接的調用或者編譯器生成的代碼引用了 memcpy,
例如:
1.字符串處理函數: 某些編譯器在處理字符串時會調用 memcpy,盡管你的代碼中沒有直接調用字符串函數。
2.結構體復制: 如果你在其他地方使用了結構體,特別是復制結構體時,編譯器可能會轉換為 memcpy 的調用。
3.優化問題: 某些優化級別下,編譯器可能會重新組織代碼,引入 memcpy 來優化內存操作。
解決方法
檢查編譯器選項,確認是否正確鏈接了標準庫。