基本上,我正在用g++ -c -o one.o one.c
分別編譯幾個C文件,然後嘗試將它們與g++ -o one.exe one.o two.o three.o
鏈接起來。鏈接器抱怨由one.c調用並在two.c中聲明的函數的未定義引用。但如果我做objdump -d two.o
功能在那裏,所以我很困惑爲什麼連接器找不到它們? e:如果我給出連接器選項-y <symbol>
,它將打印定義符號的目標文件。未定義的引用,但objdump顯示函數在目標文件中?
3
A
回答
1
設置重現:
one.cpp:
#include "two/two.h"
int main(void) {
two();
return 0;
}
生成文件:
all: one
one: one.o two.o
g++ -o one.exe one.o two/two.o
one.o:
g++ -c -o one.o one.cpp
two.o:
$(MAKE) -C two
2/two.h:
void two(void);
2/two.c :
#include <stdio.h>
#include "two.h"
void two(void) { printf("Two\n"); }
二/ Makefile文件:
all:
gcc -c -o two.o two.c
我做了什麼來解決只是改變二/ Makefile使用克++而不是GCC:
二/ Makefile文件:
all:
g++ -c -o two.o two.c
+0
您可以使用變量$(CC)和$(CXX)來避免麻煩。如果您混合使用語言,請閱讀'extern'C'' –
相關問題
- 1. 雖然js文件引用位於標題中,但未定義函數
- 2. 重定位條目未顯示在給定示例程序的objdump輸出中
- 3. 使用Javascript - 的函數的外部引用顯示「未定義」
- 4. 引用未定義在python-dev頭文件中的函數
- 5. 未定義的成員函數引用在單獨的文件中定義
- 6. 即使函數存在,但未定義的引用錯誤
- 7. Javascript函數未定義,但在源文件中
- 8. 未定義的函數調用引用?
- 9. 未定義的函數調用引用?
- 10. 未定義的引用與JsonBox函數
- 11. 未定義的libcurl函數引用
- 12. gcc未定義的引用gd函數
- 13. 未定義的散列函數引用
- 14. SDL2未定義的函數引用
- 15. C++「未定義的類::函數引用」
- 16. 對wgl函數的未定義引用
- 17. C++:未定義的函數引用
- 18. 未定義的引用靜態函數
- 19. 未定義對函數的引用
- 20. 未定義的引用函數
- 21. 對函數的未定義引用
- 22. C++未定義的函數引用
- 23. 未定義的引用CLASS ::函數()
- 24. 建立共享庫,但未定義的函數引用?
- 25. 已啓用IMAP,但函數未定義?
- 26. C錯誤:未定義的函數引用,但它被定義爲
- 27. 未定義的參考(但nm表示函數存在)
- 28. 未定義的引用用戶定義的函數
- 29. 未定義引用模板函數
- 30. 校驗值,但顯示未定義
是它C或C++。另外,顯示一些示例代碼。您的功能聲明可能與您的功能定義不同。 –
C和C++的混合,會有什麼關係?我會嘗試發佈一些代碼,但聲明絕對符合定義。 – user693861
是的,實際上。例如,[name mangling](https://en.wikipedia.org/wiki/Name_mangling)中的C和C++之間的差異會給你帶來這種悲傷。所以是的,有點重要。 – user4581301