如何在Mac OS X上构建和使用动态库?

时间:2012-04-17 16:12:06

标签: c++ macos dynamic dylib

我有一个非常简单的问题,我一直试图弄清楚过去6个小时左右。我想在Mac OS X上简单地构建一个动态库,然后使用该库构建一个应用程序。我已经创建了.dylib并用它编译了测试应用程序,但是当我运行应用程序时,我得到了:

Joes-Mac-Pro:桌面Joe $ ./test dyld:未加载库:./ lib / simple_library.dylib   参考自:/Users/Joe/Desktop/./test   原因:找不到图像 跟踪/ BPT陷阱:5

我已经尝试在可执行文件目录中创建一个lib文件夹并将dylib放入其中,同样的错误。我已经尝试将dylib放在可执行路径本身,同样的错误。我已经尝试使用install_name_tool来更改可执行文件中dylib的路径,没有任何更改,同样的错误。我尝试使用-headerpad_max_install_names构建测试应用程序,然后使用install_name_tool更改路径。仍然没有变化。同样的错误。

我是不是想用Mac操作系统做不到的事情?我是这个平台的新手,习惯于在Windows和GNU / Linux上顺利工作。此外,我正在尝试使用命令行执行所有这些操作。我非常希望避免使用XCode。

编辑:哎呀,我说。结果我在install_name_tool参数中输入了一个拼写错误。现在工作正常。

2 个答案:

答案 0 :(得分:0)

您需要确保DYLD_LIBRARY_PATH包含您的库所在的目录。

   DYLD_LIBRARY_PATH
          This is a colon separated list of directories that contain libraries. The dynamic linker searches these directo-
          ries before it searches the default locations for libraries. It allows you to  test  new  versions  of  existing
          libraries.

          For  each library that a program uses, the dynamic linker looks for it in each directory in DYLD_LIBRARY_PATH in
          turn. If it still  can't  find  the  library,  it  then  searches  DYLD_FALLBACK_FRAMEWORK_PATH  and  DYLD_FALL-
          BACK_LIBRARY_PATH in turn.

          Use  the  -L  option to otool(1).  to discover the frameworks and shared libraries that the executable is linked
          against.

动态链接的各种细节都记录在dyld手册页中。

答案 1 :(得分:0)

install_name_tool是正确的工具。 尝试otool your_binary查看哪个dylib缺失。 还要确保您的二进制文件和链接库是针对相同的体系结构构建的。