将g ++代码与共享库构建与gcc链接

时间:2011-03-10 01:58:55

标签: gcc g++

我使用gcc创建了共享库。我想使用g ++ comiler和源代码* .c链接这个库。 实施例

test_init.c
#include<stdio.h>
int test_init()
{
   printf(" test init success\n");
   return 0;
}

gcc -shared -o libtest.so test_init.c

test.c的

#include<stdio.h>
extern int test_init();
main()
{
   test_init();
}

g++ -I. -L. -ltest test.c

  

/tmp/ccuH5tIO.o:在函数main': test.c:(.text+0x7): undefined reference to test_init()'collect2中:   ld返回1退出状态

注意:如果我使用gcc编译test.c它可以工作,但我想使用这种方法,因为其他依赖。有可能??

3 个答案:

答案 0 :(得分:1)

通过声明它们来调用C ++中的C例程

 extern "C" {
     ....
 }

查看系统或Google周围的一些头文件 - 由于语言之间的功能签名系统不同,这是唯一的方法。

答案 1 :(得分:1)

正如Dirk所说,将extern int test_init();更改为extern "C" { int test_init(); }

答案 2 :(得分:0)

通常-llibrary应该在gcc命令行

中的目标文件或c / c ++文件之后
g++ -I. -L. test.c -ltest

链接器会在处理完test.c之后搜索test.c中提到的符号,当你在test.c之前放置-llib时,它就无法找到它们。

有关详细信息,请参阅man ld

使用extern时不确定事情是怎样的,在这种情况下可能会有所不同。