链接 g++使用 gcc 构建共享库的代码

发布于 2024-10-21 07:02:54 字数 583 浏览 3 评论 0原文

我使用 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.c:(.text+0x7): undefined
reference to
test_init()' collect2:
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

春花秋月 2024-10-28 07:02:54

您可以通过声明 C++ 中的 C 例程来调用它们。

 extern "C" {
     ....
 }

查看系统或 Google 上的一些头文件——这是唯一的方法,因为两种语言之间的函数签名系统不同。

You call C routines from C++ by declaring them

 extern "C" {
     ....
 }

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.

嗼ふ静 2024-10-28 07:02:54

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

As Dirk said, change extern int test_init(); to extern "C" { int test_init(); }

楠木可依 2024-10-28 07:02:54

通常 -llibrary 应该位于 gcc 命令行中的目标文件或 c/c++ 文件之后

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

链接器在处理 test.c 后以及当您放置 -llib 在 test.c 之前,它只是找不到它们。

请参阅 man ld 了解更多信息。

不确定当您使用 extern 时情况如何,也许在这种情况下有些不同。

Usually -llibrary should be after object files or c/c++ files in gcc command line

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

The 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文