我可以强制编译器将我的共享库也放入二进制文件中吗?
Can I force the compiler to put my shared libraries in the binary as well?
我确实使用 glfw3、glm、opengl 和 glut 制作了一个 OpenGL 程序。我正在使用 Ubuntu 17.04 和 G++ 编译器。我这样编译:
g++ -o main Main.cpp FastNoise.cpp shader.cpp texture.cpp -lGL -lGLU -lglfw3
-lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor -lGLEW
请注意,这是我执行的旧编译命令,因为我目前无法访问我的工作电脑。我试图在另一个 Linux 系统上执行生成的主程序,它告诉我由于缺少共享库而失败。有什么简单的方法可以解决这个问题吗?我读过我需要静态 link 我的库,但我不知道它们位于何处。我只有这样的:
sudo apt-get install libgle...
应该有 GLU、glfw 和 GLEW 的静态 link可用版本。 从不 静态 link GL 或任何 X11 东西。原因很简单:libGL.so 实际上包含了部分 GPU 驱动程序,因此它必须与内核模块和 X 服务器模块的版本相匹配才能工作。因此它必须动态地 linked。由于 libGL.so 还包含与 X11 库交互的所有 GLX 内容,因此这些 X11 库也必须 link 动态编辑。
幸运的是,OpenGL/GLX/X11 库要求已写在 Linux-Software-Base/Desktop 中,因此在任何运行基于 X11 桌面的系统上都可以使用这些东西。
我确实使用 glfw3、glm、opengl 和 glut 制作了一个 OpenGL 程序。我正在使用 Ubuntu 17.04 和 G++ 编译器。我这样编译:
g++ -o main Main.cpp FastNoise.cpp shader.cpp texture.cpp -lGL -lGLU -lglfw3
-lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor -lGLEW
请注意,这是我执行的旧编译命令,因为我目前无法访问我的工作电脑。我试图在另一个 Linux 系统上执行生成的主程序,它告诉我由于缺少共享库而失败。有什么简单的方法可以解决这个问题吗?我读过我需要静态 link 我的库,但我不知道它们位于何处。我只有这样的:
sudo apt-get install libgle...
应该有 GLU、glfw 和 GLEW 的静态 link可用版本。 从不 静态 link GL 或任何 X11 东西。原因很简单:libGL.so 实际上包含了部分 GPU 驱动程序,因此它必须与内核模块和 X 服务器模块的版本相匹配才能工作。因此它必须动态地 linked。由于 libGL.so 还包含与 X11 库交互的所有 GLX 内容,因此这些 X11 库也必须 link 动态编辑。
幸运的是,OpenGL/GLX/X11 库要求已写在 Linux-Software-Base/Desktop 中,因此在任何运行基于 X11 桌面的系统上都可以使用这些东西。