您的位置:首页 > 运维架构 > Linux

linux下动态库/静态库 链接路径设置问题

2014-01-06 17:37 405 查看
g++/gcc 连接 so动态库或者 .a静态库时,需要设置这些动态库的路径, 例如:

g++ -o main main.cpp -L./lib -ldymamic -lpthread -lrt 这些是设置到哪个目录下去查找关联的动态库。 如果在-L目录下面找不到相应的动态库,就会到 LD_LIBRARY_PATH 的目录下去找,如果还找不到,就会到/usr/lib 目录下去找。

而如果要关联静态库,例如: g++ -o main main.cpp -L./lib -ldymamic ./lib/libstatic.a 。 请注意这个静态库的路径。 对于静态库,是需要详细标明这个静态库的路径的, 因为-L后面设置的路径,对于静态库来说是无效的。

现在谈另外一个问题:

g++ -o main main.cpp -L./lib -ldymamic -lpthread -lrt 编译成功后, ./main 运行程序会报错, 提示找不到 libdymamic.so动态库。 因为使用这种方式,需要额外的设置:

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib ,之后运行main就可以正常运行了。

当然,你也可以直接这样写:

g++ -o main main.cpp /home/****/libdynamic.so -lpthread -lrt , 直接写动态库的绝对路径。 这样就不需要设置LD_LIBRARY_PATH。 但这样有一个缺陷:
这个so必须放在绝对路径下,不能放到其他地方。 这种写法很不好,不提倡。

动态库搜索路径分两种,一种是链接时候的搜索路径,一种是运行时期的搜索路径。像前面提到的 -L./lib
是属于链接时期的搜索路径,即给ld程序提供的编译链接时候寻找动态库路径;而 LD_LIBRARY_PATH则既属于链接期搜索路径,又属于运行时期的搜索路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: