【问题标题】:link to an external static library by g++通过 g++ 链接到外部静态库
【发布时间】:2015-06-24 01:23:26
【问题描述】:

我正在尝试在我的 Macbook 上执行一个名为“palindrome.cpp”的 cpp 文件使用终端。此 cpp 文件使用名为“libStanfordCPPLib.a”的外部库,该库位于“DIRECTORY TO CPP FILE/StanfordCPPLib”下,该库的相应头文件也在此“StanfordCPPLib”文件夹中。
你可以通过这个截图看到文件夹结构:

我编译这个源代码的代码是:

g++-4.8 -Wall -I/Users/myName/Downloads/CS106B/palindrome/StanfordCPPLib -L/Users/myName/Downloads/CS106B/palindrome/StanfordCPPLib palindrome.cpp libStanfordCPPLib.a

据我了解,-I代表头文件所在的目录路径,-L代表库(.a文件)所在的目录路径。这就是为什么 -I 和 -L 是相同的目录路径“/Users/myName/Downloads/CS106B/palindrome/StanfordCPPLib”。

但是,执行此命令会返回错误消息:“libStanfordCPPLib.a:没有这样的文件或目录”。如截图所示:

谁能明白为什么会这样?谢谢。

【问题讨论】:

  • 尝试执行相同的命令,从库名称“StanfordCPPLib.a”或“StanfordCPP.a”中删除部分“lib”......因为据我所知,链接器将为您的库添加前缀和后缀在搜索之前用 lib 命名。
  • 不,它仍然无法工作。错误信息是“error: StanfordCPP.a: No such file or directory”
  • 你尝试过 StanfordCPPLib.a 吗?
  • 嗨,我已经通过将 LibStanfordCPPLib.a 更改为 -lStanfordCPPLib 解决了这个问题。然后就可以编译了

标签: c++


【解决方案1】:

试试这个,使用 -lStanfordCPPLib:

g++-4.8 -Wall -I/Users/myName/Downloads/CS106B/palindrome/StanfordCPPLib -L/Users/myName/Downloads/CS106B/palindrome/StanfordCPPLib palindrome.cpp -lStanfordCPPLib

【讨论】:

  • 现在可以编译了。但是我收到一条警告说“忽略文件/Users/lihang/Downloads/CS106B/palindrome/StanfordCPPLib/libStanfordCPPLib.a,文件是为存档而构建的,它不是被链接的架构(x86_64):/Users/lihang/Downloads/CS106B /palindrome/StanfordCPPLib/libStanfordCPPLib.a”我会弄清楚的。非常感谢。
  • 警告说该库是为 x86(32 位)机器构建的。您的机器是 64 位的,因此不能使用为 32 位编译的二进制文件。您要么自己编译库形成源代码,要么获得正确的可执行文件
  • 那是有线的,因为我可以在我的 Xcode 上运行这个程序。
  • 那么,您的系统中可能安装了 32 位库。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
相关资源
最近更新 更多