使用-L和-l标志与提供库文件作为输入

时间:2018-08-01 15:10:35

标签: c++ linker

写作之间有什么区别

g++ test.cc -L/my/dir/ -lname

g++ test.cc /my/dir/libname.so吗?

都正确吗?

我能想到的事情

  1. 第一个是跨平台的,来自MINGW的g ++将寻找DLL的
  2. 在第二个中,我们明确指定要动态链接

2 个答案:

答案 0 :(得分:0)

不同之处在于

g++ test.cc -L/my/dir/ -lname

即使/my/dir/libname.so不存在也可能成功:

  • 它可以从系统库目录(通常为libname.so/lib)中找到/usr/lib
  • 它可以找到libname.a,并进行静态链接。

此外,它允许您从同一目录链接到多个库,而无需重复父目录。

答案 1 :(得分:0)

第一种方法在链接时查找/ my / dir目录中的库文件。但是,仅将简短的库名libname.so(或根据操作系统找到的任何库名)写入映像。程序启动时,它将在某个库路径(即Linux中的LD_LIBRARY_PATH)中查找该库。现在,您可以将可执行文件和库重新放置在不同的新位置,并在重新放置后设置正确的搜索路径。

第二种方法将库的完整路径写入映像:/my/dir/libname.so。程序启动时,它将寻找该特定路径来获取库。除非新环境中存在相同的库路径,否则这使得映像不可重定位。效果类似于“ -rpath”方法。