【问题标题】:Problem with linking against libexpat in Boost Build - for building graphml在 Boost Build 中链接 libexpat 的问题 - 用于构建 graphml
【发布时间】:2009-04-05 03:08:31
【问题描述】:

在我的系统上,expat 位于

/usr/include/expat.h /usr/include/expat_external.h /usr/lib/libexpat.1.5.0.dylib /usr/lib/libexpat.1.dylib /usr/lib/libexpat.dylib /usr/lib/libexpat.la

所以我导出了 boost 所需的变量来构建 graphml

导出 EXPAT_INCLUDE=/usr/include 导出 EXPAT_LIBPATH=/usr/lib

然后我运行(其中 $DIR 和 $BOOST 生成我想要包含和库去的路径)

./configure --includedir=$DIR/$BOOST --libdir=$DIR/$BOOST/lib \ --with-libraries=test,graph

我收到此错误:

ld:找不到 -lexpat collect2 的库:ld 返回 1 个退出状态

boost 说是由这条线引起的:

g++ -dynamiclib -install_name "libboost_graph-mt-1_35.dylib" -L"/usr/lib" -o“bin.v2/libs/graph/build/darwin/release/macosx-version-10.4/threading-multi/libboost_graph-mt-1_35.dylib” “bin.v2/libs/graph/build/darwin/release/macosx-version-10.4/threading-multi/read_graphviz_spirit.o” “bin.v2/libs/graph/build/darwin/release/macosx-version-10.4/threading-multi/graphml.o” -lexpat -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -Wl,-dead_strip -no_dead_strip_inits_and_terms

我不明白为什么找不到以 -L"/usr/lib"-lexpat 作为参数的 expat 库?我的理解是 /usr/lib/libexpat.dylib 完全被引用为 -L"/usr/lib"-lexpat

用于构建 graphml 的 Jamfile 是 here。如果 EXPAT_INCLUDEEXPAT_LIBPATH 没有设置,那么它会警告你(jamfile 的第 39-41 行)

警告:图形库不包含可选的 GraphML 阅读器。
注意:要启用 GraphML 支持,请设置 EXPAT_INCLUDE 和
注意:分别包含 Expat 头文件和库的目录。

【问题讨论】:

  • 我认为您正在尝试创建一个稳定的构建过程?您可能不想尝试在其他几个地方创建指向该库的符号链接以查看它是否找到该库?

标签: boost boost-build graphml


【解决方案1】:

另一个更新: 我在您的 EXPAT 所在列表中没有看到 .so 或 .a 文件……这看起来有点奇怪吗?通常它会为库名创建一个别名

例如 /usr/lib/libblah.so -> /usr/lib/libblaah.so.1.2

dynalib 是不是有点 Macintoshism(我不怎么用 Mac)

.la 是这个平台上的静态版本扩展吗?

更新:

路径周围的引号似乎很麻烦... -L"/usr/lib"

尝试将其更改为 -L/usr/lib 和 -L /usr/lib

旧的东西:

链接器在链接步骤中包含路径的指令是-L。您需要查找一些要更新的链接器标志以包含 -L path_to_expat。我认为链接器不会关注 LD_LIBRARY_PATH。我不确定您阅读了哪些文档来设置 EXPAT_INCLUDE 或 EXPAT_LIBPATH。

【讨论】:

  • 这里是告诉我设置 EXPAT_INCLUDE 和 EXPAT_LIBPATH svn.boost.org/trac/boost/browser/trunk/libs/graph/build/…的 Jamfile(构建文件)
  • 该站点的 ssl 证书已过期 :(。我不允许在我所在的计算机上使用严格的设置阅读它。我认为如果你剪切并粘贴最后一行并玩-Wl (我认为这是链接器选项,您可以手动编译它。
  • 他们为什么要我设置 shell 变量而不是像你为 --libdir 做的那样将路径作为参数传递?
  • 在开源社区中,相互依赖的项目之间存在一些奇怪的传统。在构建依赖于库的 Perl 模块时,我花了几天时间弄清楚模块是如何发出、检测和配置它们的库路径和链接器选项的。
  • 对,dylib是mac动态库后缀。而且,jamfile 将 -L 路径放在引号中,所以除了手动运行 gcc 命令之外,我不知道如何解决这个问题——就像你提到的那样,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2018-02-01
  • 1970-01-01
相关资源
最近更新 更多