-Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。每一个库都有一个soname,当连接器发现程序库(如:libhello_v1.so)中有soname (libhello.so),连接器便会将soname (libhello.so)嵌入要连接的二进制文件内,而不是库文件的实际文件名(libhello_v1.so)。在程序执行期间,程序会查找...
Xlinker后面跟的参数第一个是空格,而Wl后面跟的第一个字符是"," 对于传递“-assert definitions”命令给ld来说,Xlinker要一下子传递两个参数需要写两次“Xlinker”,比如-Xlinker -assert -Xlinker defintions而不能一下子写成-Xlinker "-assert definitions"因为链接器会认为这是一个参数,而不是两个参数。如果此时...
-Wl选项告诉编译器将后面的参数传递给链接器。 -soname则指定了动态库的soname(短名,Short for shared object name) -Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。每一个库都有一个soname,当连接器发现程序库(如:libhello_v1.so)中有soname (libhello.so),连接器便会将soname...
为解决此问题,可以在链接阶段使用-Wl,-rpath=选项添加库路径。该命令将指定路径写入可执行文件或库中,从而在运行时程序可以直接读取到。以"/home/hello/lib"为例,运行参数-Wl,-rpath=/home/hello/lib将使程序在运行时首先搜索此目录下的库文件,随后按照"/usr/lib"/"/usr/local/lib"的顺序查找。
GCC在链接的时候以section为单元处理,所以可以尝试使用-ffunction-sections/-fdata-sections将每个函数或者符号创建成独立的section,然后结合选项-Wl,--gc-sections让链接器忽略用不到的section,这样就可以减少目标可执行程序的大小。其中-Wl表示将后面的参数传递给链接器,所以也可以直接设置链接器选项。
而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。 我们常常使用下面的配置启用这个功能: CFLAGS+=-ffunction-sections-fdata-sections LDFLAGS+=-Wl,--gc-sections...
因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。
gcc main.c -L. -Wl,-rpath-link=. -laaa -o main.out 如果libaaa.so还依赖于别的额外库, 则可以去-Wl,-rpath或-Wl,-rpath-link参数指明的路径中搜索libaaa.so需要依赖的库 (编译libaaa.so库的时候,已经明确指明了libaaa.so依赖于libbbb.so。 所以,-Wl,-rpath或-Wl,-rpath-link参数指明的路径是...
3.链接器参数 4.调试参数 三、具体参数详解 1.编译器优化参数 1.-O 参数 2.-O2 参数 3.-O3 参数 4.-Os 参数 2.预处理指令参数 1.-D 参数 2.-U 参数 3.-Id 参数 4.-Iu 参数 3.链接器参数 1.-L 参数 2.-l参数 3.-L/lib 参数 4.-Wl 参数 4.调试参数 1.-g 参数 2.-G 参数 3.-...
该参数用于指定所使用的C语言标准,例如`-std=c89`表示使用C89标准。gcc支持多个C语言标准,包括C89、C99、C11等。gcc的文档提供了关于不同C语言标准的详细信息。 10. `-Wl`:传递选项给链接器。该参数用于将选项传递给链接器。例如,`gcc -Wl,--export-dynamic myfile.c`将传递选项`--export-dynamic`给链接...