当前位置: 技术问答>linux和unix
在linux下用gcc编译时能不能实现“选择”的静态连接呢?
来源: 互联网 发布时间:2015-06-23
本文导语: 比如编译一个简单gtk程序,执行gcc gtk1.c -o gtk1 `gtk-config --libs --cflags` 生成一个可执行程序gtk1。 执行ldd gtk1,会看到它动态连接了很多共享库 但如果我用静态连接,即,执行gcc gtk1.c -o gtk1 `gtk-config --libs --cflag...
比如编译一个简单gtk程序,执行gcc gtk1.c -o gtk1 `gtk-config --libs --cflags`
生成一个可执行程序gtk1。
执行ldd gtk1,会看到它动态连接了很多共享库
但如果我用静态连接,即,执行gcc gtk1.c -o gtk1 `gtk-config --libs --cflags` -static,它又会把所有的库都进行静态连接了。
如果我想只这些库中的其中几个进行静态连接,也就是说我不想把所有的库都“静态”连接到我的程序,那么我该怎么做呢?
生成一个可执行程序gtk1。
执行ldd gtk1,会看到它动态连接了很多共享库
但如果我用静态连接,即,执行gcc gtk1.c -o gtk1 `gtk-config --libs --cflags` -static,它又会把所有的库都进行静态连接了。
如果我想只这些库中的其中几个进行静态连接,也就是说我不想把所有的库都“静态”连接到我的程序,那么我该怎么做呢?
|
是的,完全同意yhbttfile(小兵)
|
可以实现。。。
但是在GCC中-shared和-static选项只能使用其一。
所以,如果要实现动态和静态链接,则指定-shared,然后把需要静态链接的不通过-l指出,而是在链接命令中直接把静态库给出。如下:
gcc -o hello x1.o x2.o -shared -L/usr/lib -lpthread libxx1.a libxx2.a
其中-lpthread指定动态链接(libpthread.so),因为使用默认动态链接。
libxx1.a libxx2.a两个使用静态链接。如果报告找不到这文件,给绝对路径吧。
但是在GCC中-shared和-static选项只能使用其一。
所以,如果要实现动态和静态链接,则指定-shared,然后把需要静态链接的不通过-l指出,而是在链接命令中直接把静态库给出。如下:
gcc -o hello x1.o x2.o -shared -L/usr/lib -lpthread libxx1.a libxx2.a
其中-lpthread指定动态链接(libpthread.so),因为使用默认动态链接。
libxx1.a libxx2.a两个使用静态链接。如果报告找不到这文件,给绝对路径吧。