gcc选项含义

https://blog.csdn.net/soaringlee_fighting/article/details/65448010

 

 

GCC选项_-Wl,-soname

https://blog.csdn.net/gohome520/article/details/7259450

 

gcc指定程序运行时,额外包括库搜索路径

gcc main.c -g -o main -lget -L./ -Wl,-rpath=/home/Panodic/zengzhihao/work_place/get


"-L./"保证编译链接的正确,但是不保证运行时可以找到库路径
"-Wl,-rpath"指定程序运行时,搜索的库路径包括此位置

 

Makefile例子

all:
	#gcc -g -fPIC -shared -o libget.so.1.2 get.c -Wl,-soname,libget.so.1
	#gcc -g -fPIC -shared -o libget.so get.c
	#gcc main.c  -g -o main -lget -L./
	#aarch64-linux-gnu-gcc -g -fPIC -shared -o libget.so.1.2 get.c -Wl,-soname,libget.so.1
	aarch64-linux-gnu-gcc -g -fPIC -shared -o libget.so.1.2 get.c -Wl,-soname,libget.so.1,-rpath=/mnt/tmp
	#create libget.so.1->libget.so.1.2
	ldconfig -n ./
	-ln -s ./libget.so.1.2 ./libget.so
	aarch64-linux-gnu-gcc main.c  -g -o main -lget -L./ -Wl,-rpath=/mnt/tmp/get



aarch64-linux-gnu-readelf -d libget.so.1.2
Dynamic section at offset 0x870 contains 26 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000e (SONAME)             Library soname: [libget.so.1]
 0x000000000000000f (RPATH)              Library rpath: [/mnt/tmp]

 

两个版本同时存在的Makefile

all:
	aarch64-linux-gnu-gcc -g -fPIC -shared -o libget.so.1.0 get1.c -Wl,-soname,libget.so.1,-rpath=/mnt/tmp/get
	aarch64-linux-gnu-gcc -g -fPIC -shared -o libget.so.2.0 get2.c -Wl,-soname,libget.so.2,-rpath=/mnt/tmp/get
	#create libget.so.1->libget.so.1.0
        #create libget.so.2->libget.so.2.0
	ldconfig -n ./
	#version 1
	-ln -s ./libget.so.1.0 ./libget.so
	aarch64-linux-gnu-gcc main.c  -g -o main1 -lget -L./ -Wl,-rpath=/mnt/tmp/get
	rm ./libget.so
	-ln -s ./libget.so.2.0 ./libget.so
	aarch64-linux-gnu-gcc main.c  -g -o main2 -lget -L./ -Wl,-rpath=/mnt/tmp/get



aarch64-linux-gnu-readelf -d main1
 0x0000000000000001 (NEEDED)             Shared library: [libget.so.1]

aarch64-linux-gnu-readelf -d main2
 0x0000000000000001 (NEEDED)             Shared library: [libget.so.2]

 


第三方库交叉移植时,一般需要设置的参数
编译器
CC=
编译后的文件路径
--prefix=
链接的库路径
LDFLAGS=-L
链接的库的头文件路径
CPPFLAGS=-I

(头文件路径-I,库路径-L,链接库名-l)
CFLAGS		用于C编译器的选项,指定头文件路径,如CFLAGS+=-I/usr/include -I/path/include
LDFLAGS		gcc等编译器使用的一些优化参数,也包括指定链接的库路径,如LDFLAGS+=-L/usr/lib -L./
LIBS			编译器需要链接哪些库,如LIBS+=-lpthread -lglib2

CXXFLAGS 	用于C++编译器的选项
		


gcc main.c -g -o main -lget -L./ -Wl,-rpath=/home/Panodic/zengzhihao/work_place/get

"-L./"保证编译链接的正确,但是不保证运行时可以找到库路径
"-Wl,-rpath"指定程序运行时,搜索的库路径包括此位置

--enable-shared
--disable-shared
--enable-static
--disable-static

 

 

你可能感兴趣的:(转载,gcc,Wl)