[英]Link .o (C object file) to C++ file/project on Linux
我在Linux中的.o文件有问题,如下所示:
我有Visual.cpp调用函数ECL_Drawrect(),此函数定义为:
#define ECL_Drawrect ECL_bDrawrect
在我的Visual.cpp中,我还包括“ ecl.h”,如下所示:
#include "ecl.h"
int main() {
ECL_Drawrect (0,0,20,20,false);
return 0;
}
问题在于eCL.bDrawrect函数位于ecl.o文件中,我不知道如何链接它以使用上述函数。
经过研究,我发现并设置如下:
g++ Visual.cpp -o Visual /usr/include/ecl.o
ecl.o路径也包含在我的项目中,当我编译时出现此错误:
**** Build of configuration Debug for project Visual ****
make all
Building file: ../src/Visual.cpp
Invoking: GCC C++ Compiler
g++ -m32 -O0 -g3 -Wall -c -fmessage-length=0 /usr/include/ecl.o -MMD -MP -MF"src/Visual.d" -MT"src/Visual.d" -o "src/Visual.o" "../src/Visual.cpp"
g++: /usr/include/ecl.o: linker input file unused because linking not done
Finished building: ../src/Visual.cpp
Building target: Visual
Invoking: GCC C++ Linker
g++ -m32 -o "Visual" ./src/Visual.o
/usr/bin/ld: ./src/Visual.o: in function main:../src/Visual.cpp:7: error: undefined reference to 'ECL_bDrawrect'
collect2: ld returned 1 exit status
make: *** [Visual] Error 1
**** Build Finished ****
我不知道链接是否正确? 如何正确链接此ecl.o文件?
p / S:我在ubuntu 11.04 64位中使用eclipse CDT,而ecl.o是32位的,这就是为什么我必须将-m32放入g ++的原因。
ecl.o文件未在链接器命令行上列出。
另外,您可能需要在包含周围使用extern "C"
:
extern "C" {
#include "ecl.h"
}
问题可能是C ++名称修改吗? 也许将您的函数声明为外部“ C”,它将起作用。
#ifdef __cplusplus
extern "C" {
#endif
/* ... */
#ifdef __cplusplus
}
#endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.