在fedora中混合静态和动态库

时间:2014-09-22 19:55:43

标签: c++ c linux gcc

如何混合二进制文件的动态和静态链接已经有了一些答案。 就像我到目前为止阅读的答案一样,我编译如下:

gcc main.cpp -static-libstdc++ -static-libgcc -Wl,-Bstatic -lm -lstdc++ -lpthread -lrt -lc -Wl,-Bdynamic -lmyshared_lib -L. libx.a liby.a

但后来我收到了一个错误:

/usr/lib/gcc/i686-redhat-linux/4.7.2/../../../libpthread.a(libpthread.o): In function `sem_open':
(.text+0x6407): warning: the use of `mktemp' is dangerous, better use `mkstemp'
/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc/i686-redhat-linux/4.7.2/../../../libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie
collect2: error: ld returned 1 exit status

第三方lib本身依赖于libc.so.6,所以我猜这现在与我的静态链接libc冲突了。 如果我使用-fPIE和-pie参数进行编译,如下所示 - 应用程序会立即进行段错误:

gcc main.cpp -fPIE -static-libstdc++ -static-libgcc -Wl,-Bstatic -lm -lstdc++ -lpthread -lrt -lc -Wl,-Bdynamic -lmyshared_lib -L. libx.a liby.a -Wl,-pie

它甚至可以编译几乎完全静态,只是另外链接一个共享对象吗?

我尝试这样做是因为我希望使用32位第三方共享对象在x64系统上运行一个特定的32位二进制文​​件...

0 个答案:

没有答案