G ++:链接动态(dylib)库

时间:2016-08-04 22:37:44

标签: c++ opengl g++ dylib

我最近一直试图在Mac上编写一个opengl程序并将其部署为控制台应用程序并将其分发给其他Mac用户。

由于程序是用C ++编写的,我决定使用g ++。我的程序需要使用OpenGL框架,GLFW和GLEW。我在/ usr / local / lib文件夹中有GLFW和GLEW库,在/ usr / local / include文件夹中有头文件。我的主文件名为main.cpp。 GLFW动态加载库名为libglfw.3.2.dylib,GLEW动态加载库名为libGLEW.2.0.0.dylib。

当我使用main.cpp文件目录中的以下命令在g ++中编译时:

g++ -arch x86_64 -framework OpenGL -I/usr/local/include -L/usr/local/lib  -o Main main.cpp -lglfw.3.2 -lGLEW.2.0.0

所有内容都正确编译并运行程序。

但是,这会通过绝对路径链接库:/ usr / local / lib。这意味着当我将可执行文件移动到另一台计算机时,它将无法运行。我需要在每台计算机上加载dylib。所以我尝试将它们移动到包含main.cpp文件的文件夹,并使用$(CURDIR)链接到我当前的目录:

g++ -arch x86_64 -framework OpenGL -I/usr/local/include -L'$(CURDIR)'  -o Main main.cpp -lglfw.3.2 -lGLEW.2.0.0

这不起作用,因为由于某种原因,它似乎不会将'$(CURDIR)'识别为当前目录,或者它可能不是一个有效的变量。

我正在寻找一种方法来链接我的dylib,这样我就可以将我的可执行文件移动到任何计算机上并使其正常工作。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

-L给出的路径仅供链接器查找额外库。这些库在运行时所在的位置不受-L控制。相反,你应该看一下名为rpath的东西。有关于如何在MacOS X上正确执行此操作的文章:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/RunpathDependentLibraries.html