【发布时间】:2018-02-23 18:30:33
【问题描述】:
我正在尝试在 Debian 上构建一个共享对象库
cat /etc/issue
Debian GNU/Linux 9 \n \l
我像往常一样构建库和对象(wrap.c 用作创建所有对象文件的包装器)
gcc -c -fPIC -W -Wall -O2 -funroll-loops wrap.c
gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o
mv libtest.so /usr/local/lib/ && mv test-header.h /usr/local/include/
然后我创建一个test.c拉入库并编译成功如下:
gcc test.c -ltest
但是,运行程序./a.out 会返回以下错误:
./a.out:加载共享库时出错:libtest.so:无法打开共享对象文件:没有这样的文件或目录
查看.so,我看到了:
$ ldd /path/to/libtest.so
linux-vdso.so.1 (0x00007ffdb71c5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1c22fba000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1c23560000)
我什至没有看到libtest.so => none,这至少会告诉我它找不到库。
我不太确定这里发生了什么。
我将使用相同的进程(使用gcc -dynamiclib -o libtest.dylib *.o)在macOS 上成功创建.dylib,并且我可以在可执行文件中成功调用库。我不确定 Debian 有什么不同。
【问题讨论】:
标签: c gcc shared-libraries shared-objects ldd