我有一个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.opath也包含在我的项目中,当我编译我得到这个错误:
**** 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 ++的名字? 也许将函数声明为extern“C”,它将起作用。
#ifdef __cplusplus extern "C" { #endif /* ... */ #ifdef __cplusplus } #endif