将.o(C目标文件)链接到Linux上的C ++文件/项目

我有一个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