2017-12-27 798 views
0

GCC(链接)是否在用绝对路径指定时找不到库。请注意,我想要这样做的原因是我有一个构建系统,可以通过绝对路径解决所有库问题,因此它可以保留一组有序的唯一条目。指定具有绝对路径的库的GCC行为是什么

g++ (...) -l/path/to/library.so 

我看到一个bug报告,其中有些人认为这是一个错误,和其他人认为它曾经工作过的事实是一个错误,这是固定的。

有一些讨论,一个曾与一个先于道“:”

反正没能正常工作。

因此,为了在构建系统中进行测试,我将代码放在绝对库路径中,如果它的“前缀”与指定给GCC的任何库路径匹配并截断绝对库路径。

g++ (...) -L/path/to -llibrary.so 

这工作。
我也试过这个。

g++ (...) -L/path/to -l/path/to/library.so 

它工作。 9(虽然调查..看起来像这是在构建脚本中的错误)

似乎如果任何指定为GCC的搜索路径是指定一个绝对路径的库的“前缀”,它会找到该库。我还假定它需要在提供的库路径的有序列表中的第一个命中。

所以我的问题。

  • 这种支持行为?
  • 这是更好的截断构建脚本中的绝对库路径或通过绝对路径。

我启事带来了一些相关的问题在这里:

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

这表明“非搜索”完整路径是“烧”到可执行从而覆盖所有运行时库路径当它是执行?它是否正确 ?如果是这样,则意味着在命令行上指定具有完整路径的库是不合适的。部署时,构建的应用程序和关联的库将安装在标准的可搜索位置。

回答

1

我想在这种情况下说的不使用-l,只是通过完整的库路径作为命令的一部分: GCC(其他选项)/path/to/library.so

+0

这意味着它将通过查看后缀来确定它是一个库吗? – peterk

+0

@peterk:不,Unix通常不支持文件。它将通过查看文件的结构来确定它是一个库。 –

+0

@MartinBonner GCC不会自动查找相应的存根'.a'文件吗? – user0042

0

注:此是与gcc(Raspbian 4.9.2-10)4.9.2我正在为它建立一个库集。

好 - 多敲打它,并测试不同的情况下

使用完整路径作为参数传递给GCC在硬编码的绝对路径显然燃烧到用于在运行时解决它是图书馆。这是不希望的,因为应用程序旨在与可搜索的共享库一起部署,最终可能会在不同的地方出现。

-llibmyLib.so does not work with a search path. 
-lmyLib   does work with a search path 
    (with lib prefix and suffix removed - apparently 
     it tries all available suffi and prepends "lib" for it's 
     search by default) 

-

-l:libmyLib.so DOES work with a search path, 
       as ':' specifies the file name is not to be altered. 

-l:debug/libmyLib.so DOES work (a subdir under the search path) 
-l:release/libmyLib.so DOES work (a subdir under the search path) 

有了这个信息 - (显然)知道它做什么,现在我可以继续前进!

相关问题