【发布时间】:2018-04-27 04:39:23
【问题描述】:
我正在尝试将 zstd 库(我有 libzstd.a 或 libzstd.so)静态链接到我的共享库 libtest.so。想法是,在我们的应用程序中部署 libtest.so 时,我们不必再依赖 libzstd.a 或 libzstd.so,因此我们必须静态链接 zstd 库。
我试过这些:
cc -fPIC -Wl,-soname=libtest.so -static-libgcc -shared -o libtest.so myobjects.o -ldl -lc -L/path/to/libzstd -l:libzstd.a
cc -fPIC -Wl,-soname=libtest.so -static-libgcc -shared -o libtest.so myobjects.o -ldl -lc -Wl,-Bstatic -L/path/to/libzstd -l:libzstd.a
cc -fPIC -Wl,-soname=libtest.so -static-libgcc -shared -o libtest.so myobjects.o -ldl -lc /path/to/libzstd/libzstd.a
但他们都给我这个错误:
/bin/ld: /path/to/libzstd/libzstd.a(zstd_common.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object;
recompile with -fPIC
/path/to/libzstd/libzstd.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libtest.so] Error 1
这里有什么问题?谢谢!
【问题讨论】:
标签: gcc linker shared-libraries static-libraries static-linking