我使用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它可以工作,但我想使用这种方法,因为其他依赖。有可能??
答案 0 :(得分:1)
通过声明它们来调用C ++中的C例程
extern "C" {
....
}
查看系统或Google周围的一些头文件 - 由于语言之间的功能签名系统不同,这是唯一的方法。
答案 1 :(得分:1)
正如Dirk所说,将extern int test_init();
更改为extern "C" { int test_init(); }
答案 2 :(得分:0)
通常-llibrary
应该在gcc命令行
g++ -I. -L. test.c -ltest
链接器会在处理完test.c之后搜索test.c中提到的符号,当你在test.c之前放置-llib
时,它就无法找到它们。
有关详细信息,请参阅man ld
。
使用extern
时不确定事情是怎样的,在这种情况下可能会有所不同。