我正在为我的opengl项目链接glfw3库。我尝试在Mac和Linux环境中编译并运行代码。在Linux中,glfw3库存储为libglfw.so.3.2
,而在Mac中,它存储为libglfw.3.2.dylib
。
要在Mac中链接此g ++库,我只需要使用以下代码
g++ -o Animation glad.o Animation.o -L/usr/local/lib -lglfw
与Linux一样,我必须添加-ldl
,否则它将显示错误。
g++ -o Animation glad.o Animation.o -L/usr/lib/x86_64-linux-gnu -ldl -lglfw
为什么-ldl
对于.so
文件是必需的,而对于.dylib
文件却不是必需的?预先感谢!
答案 0 :(得分:1)
不同的系统将功能拆分到不同的库中。 POSIX要求应用程序在使用某些头文件中的功能时链接到某些库:
请注意,对于大多数库,POSIX表示实现可以在缺少此选项的情况下搜索该库。大多数实现使用此许可权将至少某些功能放入主C库,因此可以在不显式链接到POSIX要求的库的情况下使用它。结果是,在某些系统上,您需要链接这些库,而在其他系统上则不需要。
从技术上讲,Linux(glibc?)解决方案不符合POSIX,因为-ldl
未列为使用<dlfcn.h>
中的函数所需的库。某些库也丢失(例如-lxnet
)。 autoconf
之所以诞生,部分原因是历史上的UNIX实现之间存在这种差异: