链接 g++使用 gcc 构建共享库的代码
我使用 gcc 制作了共享库。我想使用 g++ 编译器与源代码 *.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测试.c
/tmp/ccuH5tIO.o:在函数
main' 中: test.c:(.text+0x7): 未定义 参考
test_init()'collect2: ld 返回 1 退出状态
注意:如果我用 gcc 编译 test.c 它可以工作,但由于其他依赖项,我想使用这种方法。是否可以??
I made shared library using gcc . I would like to link this library using g++ comiler with source code *.c.
Example
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: In function
main':
test_init()' collect2:
test.c:(.text+0x7): undefined
reference to
ld returned 1 exit status
Note: If i compile test.c with gcc it works, but i would like to use this approach due to other dependencies. Is it possible??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以通过声明 C++ 中的 C 例程来调用它们。
查看系统或 Google 上的一些头文件——这是唯一的方法,因为两种语言之间的函数签名系统不同。
You call C routines from C++ by declaring them
Look into a few header files on your system or Google around -- that's the only way to do it because of different function signature systems between the languages.
正如 Dirk 所说,将 extern int test_init(); 更改为 extern "C" { int test_init(); }
As Dirk said, change
extern int test_init();
toextern "C" { int test_init(); }
通常
-llibrary
应该位于 gcc 命令行中的目标文件或 c/c++ 文件之后链接器在处理 test.c 后以及当您放置
-llib
在 test.c 之前,它只是找不到它们。请参阅
man ld
了解更多信息。不确定当您使用 extern 时情况如何,也许在这种情况下有些不同。
Usually
-llibrary
should be after object files or c/c++ files in gcc command lineThe linker searches for the symbols mentioned in test.c after it's processed and when you put
-llib
before test.c, it's just unable to find them.See
man ld
for more info.Not sure how the things are when you use
extern
, perhaps something is different in this case.