使用-L和-L标志与将库文件作为输入进行比较

Using -L and -l flags vs giving library file as input

本文关键字:输入 比较 标志 使用 文件      更新时间:2023-10-16

写有什么区别

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

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

两者都正确吗?

我能想到的事情:

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

区别在于

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

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

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

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

第一个方法在链接时查找库文件的/my/dir目录。然而,只有一个简短的库名称libname.so(或根据操作系统找到的任何名称(被写入图像中。当程序启动时,它将在某个库路径中查找库,即linux上的LD_library_path。现在,您可以将可执行文件和库重新定位到不同的新位置,并在重新定位后设置正确的搜索路径。

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