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

时间:2011-09-13 09:46:02

标签: c++ linux ubuntu linker object-files

我在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 ++中。

2 个答案:

答案 0 :(得分:5)

链接器命令行中未列出ecl.o文件。

此外,您可能需要在include:

周围使用extern "C"
extern "C" {
#include "ecl.h"
}

答案 1 :(得分:0)

问题可能是C ++名称错误吗?也许宣布你的职能为外部“C”,它会起作用。

#ifdef __cplusplus 
extern "C" {
#endif
/* ... */
#ifdef __cplusplus
}
#endif