使用-Wl,-Bstatic
为了告诉gcc
我想静态链接哪些库,感觉很奇怪。毕竟我直接告诉gcc
所有关于链接库的其他信息(-Ldir
,-llibname
)。直接告诉gcc静态链接库
是否可以直接告诉gcc驱动程序哪些库应该静态链接?
澄清:我知道,如果只存在于静态版本一定的图书馆,它会使用它,而-Wl,-Bstatic
,但我想暗示gcc
喜欢静态库。我也知道直接指定库文件会与它链接,但我更愿意保持包含静态和动态库的语义相同。
使用-Wl,-Bstatic
为了告诉gcc
我想静态链接哪些库,感觉很奇怪。毕竟我直接告诉gcc
所有关于链接库的其他信息(-Ldir
,-llibname
)。直接告诉gcc静态链接库
是否可以直接告诉gcc驱动程序哪些库应该静态链接?
澄清:我知道,如果只存在于静态版本一定的图书馆,它会使用它,而-Wl,-Bstatic
,但我想暗示gcc
喜欢静态库。我也知道直接指定库文件会与它链接,但我更愿意保持包含静态和动态库的语义相同。
当然有可能使用-l:
而不是-l
。例如-l:libXYZ.a
与libXYZ.a
链接。注意lib
写出,而不是-lXYZ
这将自动扩展到libXYZ
。
您可以在连接命令添加某文件:
gcc yourfiles /path/to/library/libLIBRARY.a
但这不是用gcc司机说话,但ld
连接像-Wl,anything
选项。
当您告诉gcc或ld“-Ldir -lLIBRARY”时,链接器将检查库的静态和动态版本(您可以看到使用-Wl,--verbose
的过程)。要更改检查的库类型的顺序,您可以使用-Wl,-Bstatic
和-Wl,-Bdynamic
。下面是GNU LD的手册页:http://linux.die.net/man/1/ld
要使用LIB1,动态LIB3和LIB2链接程序静态地,使用这样的GCC电话:
gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3
假设LD的是默认设置是使用动态库(它在Linux上)。
简版:当前'gcc'没有办法做到这一点。 –
Elazar Leibovich,但'gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3'就是这么做的。 – osgx
是的,但问题是如何做到这一点,而不诉诸直接'ld'选项。 –
上帝,如果只有牛羚已经在第一个地方,而不是lib前缀的疯狂,这是默认的。哦,我们可以节省的时间和挫折。 – Timmmm
Radek,这是'-l:'选项记录?我需要使用哪个版本的gcc? – osgx
实际上,它是'ld'链接器的选项https://sourceware.org/binutils/docs/ld/Options.html“*'-l namespec' ..如果namespec的格式为:filename,则ld将搜索一个名为filename的文件的路径,否则它会在ELF ..系统上搜索名为libnamespec.a ..的文件的库路径,ld将在搜索名为libnamespec.so的库之前搜索一个名为libnamespec的库。 a。..请注意,此行为不适用于:filename,它始终指定一个名为filename。*的文件。由于binutils 2.18 - https://sourceware.org/binutils/docs-2.18/ld/Options.html – osgx