我正在尝试编译一个c程序,这是我很久没有做的事情......
我正在尝试的是:
g++ -c A.cpp -o A.o g++ -c dir/B.h -o B.o
这似乎工作,然后我尝试:
g++ A.o B.o -o A -lX11 -lpthread
得到:
B.o:文件无法识别:文件格式无法识别collect2:ld返回1退出状态
问题是什么?
非常感谢 :)
在编译b.h时省略-o参数,你可能会看到g创建了一个名为b.h.gch而不是b.o的文件 . 该文件是“预编译的头文件” . 通过在b.o中重命名,您将对随后的g调用文件内容进行调用 . 如果b.h是头文件,那么你应该将它包含在a.cpp中 . 如果b.h包含函数定义,则应将其重命名为b.cpp .
g++ -c dir/B.h -o B.o
为什么要编译头文件?
我假设A.cpp包含dir / B.h - 因此您不需要单独的编译器调用来编译头 .
您正在编译头文件 . 没有好处可以来 . :-)
3 回答
在编译b.h时省略-o参数,你可能会看到g创建了一个名为b.h.gch而不是b.o的文件 . 该文件是“预编译的头文件” . 通过在b.o中重命名,您将对随后的g调用文件内容进行调用 . 如果b.h是头文件,那么你应该将它包含在a.cpp中 . 如果b.h包含函数定义,则应将其重命名为b.cpp .
为什么要编译头文件?
我假设A.cpp包含dir / B.h - 因此您不需要单独的编译器调用来编译头 .
您正在编译头文件 . 没有好处可以来 . :-)