我正在Mac上使用gnu autotools建立一个项目。一切都可以正常编译,但是我在与动态库链接时遇到了问题。如何在Makefile.am脚本中指定install_name。我认为可能是这样的:

    lib_LTLIBRARIES = libphysics.la

    libphysics_la_SOURCES = PhysicsEngine.cpp\
       PointMass.cpp\
       Spring.cpp\
       WaterForceGenerator.cpp

    AM_CPPFLAGS=  @CXXFLAGS@\
        -I../include\
        -Iinclude\
        -I../evolutionaryStuff/include\
        -I../geom/include\
        -I../model/include\
        -I../paramsReader/include\
        -I../ctrnn/include\
        -I../simulationSystem/include

    AM_LDFLAGS= @LDFLAGS@ \
        -install_name "./.libs/libphysics.0.dylib"

...但是当我这样做时:

otool -D libphysics.0.dylib

在.libs目录中

/usr/local/lib/libphysics.0.dylib

(但我希望它像.libs / libphysics.0.dylib这样)

我知道这一定很简单,有什么想法吗?

谢谢,

最佳答案

到处乱逛之后,似乎Makefile.am文件中的正确条目应该是:

    AM_LDFLAGS= @LDFLAGS@\
             -Xlinker -rpath -Xlinker "`pwd`/.libs"\
             -Xlinker -install_name -Xlinker "`pwd`/.libs/libphsyics.0.dylib"

我不知道为什么这样。诀窍是在“-rpath”和“-install_name”之前和之后添加成对的“-Xlinker”标志。如果有人能告诉我为什么这样做是必要的,我将不胜感激。

谢谢,



编辑:我应该指出,How to set the runtime path (-rpath) of an executable with gcc under Mac OSX?发布有助于解决这一问题。

关于c++ - (mac c++开发),对于一个动态库,在Makefile.am脚本中在哪里指定install_name?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4775887/

10-11 18:37