C和Golang集成问题

时间:2016-10-26 15:44:10

标签: c go dlopen cgo

我有一个名为libtest.so的C共享库,后者又使用另一个共享库lihelp.so。 libtest.so的代码使用dlopen()来加载libhelp.so

我已经将libtest.so与我的GO脚本gotest.go

集成在一起

当我在构建和安装后运行gotest.go时,我看到libtest.so已成功加载并且libtest中的函数已成功执行。 但是在libtest.so中调用dlopen()来加载libhelp.so失败并显示错误“undefined symbol:dlopen”

但是,如果我编写一个使用libtest.so的C应用程序,所有执行都可以正常运行。

以下是我的Go文件的代码段

/*
 #cgo CFLAGS: -I./include
 #cgo LDFLAGS: -L. -ltest -ldl
*/

这是构建libtest.so的Makefile条目

CC = gcc # C compiler
CFLAGS = -c -fPIC -I./include # C flags
LDFLAGS = -shared -L/lib -ldl # linking flags

任何人都可以提出可能存在的问题吗?

输出我的二进制文件的ldd

ldd app
    linux-gate.so.1 =>  (0xb77c3000)
    libtest.so => ./libtest.so (0xb77bc000)
    libgo.so.5 => /usr/lib/i386-linux-gnu/libgo.so.5 (0xb6ed0000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6eb2000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6d03000)
    /lib/ld-linux.so.2 (0xb77c4000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6ce7000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6ca1000)

0 个答案:

没有答案