1

在我的系统上,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"and -lexpat

用于构建 graphml 的 Jamfile 在这里。如果EXPAT_INCLUDE并且EXPAT_LIBPATH未设置,则它会警告您(jamfile 的第 39-41 行)

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

4

1 回答 1

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。

于 2009-04-05T03:14:45.520 回答