带库的USB GCC开发环境 我试图在USB插件上找到一个环境来开发C++代码。我计划使用其他计算机,大部分时间是linux,使用g++和make从命令行处理这个问题
问题是我需要使用一些库,比如Lua和OpenGL,而计算机没有这些库。我无法将它们添加到普通目录,我在这些计算机上没有根目录。我发现的大多数解决方案都涉及到将东西放入/usr/lib/之类的文件中,但我无法做到这一点。我还尝试添加诸如'-L/media//lib'之类的选项,这些选项就是保存它们的地方,但没有成功。编译时,我会遇到与第一次切换到未安装库的操作系统时相同的错误带库的USB GCC开发环境 我试图在USB插件上找到一个环境来开发C++代码。我计划使用其他计算机,大部分时间是linux,使用g++和make从命令行处理这个问题,gcc,linker,g++,usb,Gcc,Linker,G++,Usb,问题是我需要使用一些库,比如Lua和OpenGL,而计算机没有这些库。我无法将它们添加到普通目录,我在这些计算机上没有根目录。我发现的大多数解决方案都涉及到将东西放入/usr/lib/之类的文件中,但我无法做到这一点。我还尝试添加诸如'-L/media//lib'之类的选项,这些选项就是保存它们的地方,但没有成功。编译时,我会遇到与第一次切换到未安装库的操作系统时相同的错误 在/usr/I之外的计算机上是否有其他地方可以放置它们,或者有什么方法可以让gcc“看到”它们?要利用这些库编译代码,您需
在/usr/I之外的计算机上是否有其他地方可以放置它们,或者有什么方法可以让gcc“看到”它们?要利用这些库编译代码,您需要的不仅仅是库。(我在这里假设Linux,在OSX、BSD、Cygwin、Mingw等平台上可能会略有不同。) 图书馆 对于开发,当您的代码使用库时,您需要以下三件事:
- 库头文件.h文件
- 库开发文件libXXX.so或libXXX.a通常
- 库运行时文件libXXX.so.Y,其中Y是版本号。如果在库中静态链接,则不需要这些
- 编译源代码时使用(例如)编译器标志
,以引用头文件的非标准位置-I/media/include
- 使用编译器/链接器标志
引用库的非标准位置-L/media/lib
ldd
工具以帮助调试此步骤
运行程序时,您需要告诉系统在何处加载其他库,以下是3个备选方案:
- 系统范围:编辑/etc/ld.so.conf并在其中添加/media/libs。然后运行
ldconfig-a
- 本地,仅适用于当前外壳。设置LD_LIBRARY_PATH环境变量以引用/media/lib,运行
export LD_LIBRARY_PATH=/media/lib
- 可执行文件:硬编码可执行文件中的非标准库路径。在创建可执行文件时,将此添加到链接步骤:
-Wl,-rpath,/media/lib
- 缺少标题和/或开发库(对于动态库,通常有一个从libXXX.so到libXXX.so.Y的符号链接,链接器需要libXXX.so,它不会直接查看libXXX.so.Y)
- 使用与当前操作系统/体系结构不兼容的库。(在一个linux发行版上编译的库通常与另一个发行版不兼容,甚至与同一发行版的另一个次要版本也不兼容)
- 使用带有FAT32文件系统的usb记忆棒,您将在符号链接方面遇到麻烦
- 库头文件.h文件
- 库开发文件libXXX.so或libXXX.a通常
- 库运行时文件libXXX.so.Y,其中Y是版本号。如果在库中静态链接,则不需要这些
- 编译源代码时使用(例如)编译器标志
,以引用头文件的非标准位置-I/media/include
- 使用编译器/链接器标志
引用库的非标准位置-L/media/lib
ldd
工具以帮助调试此步骤
运行程序时,您需要告诉系统在何处加载其他库,以下是3个备选方案:
- 系统范围:编辑/etc/ld.so.conf并在其中添加/media/libs。然后运行
ldconfig-a
- 本地,仅适用于当前外壳。设置LD_LIBRARY_PATH环境变量以引用/media/lib,运行
export LD_LIBRARY_PATH=/media/lib
- 可执行文件:硬编码可执行文件中的非标准库路径。在创建可执行文件时,将此添加到链接步骤:
-Wl,-rpath,/media/lib
- 缺少标题和/或开发库(对于动态库,通常有一个从libXXX.so到libXXX.so.Y的符号链接,链接器需要libXXX.so,它不会直接查看libXXX.so.Y)
- 使用与当前操作系统/体系结构不兼容的库。(在一个linux发行版上编译的库通常与另一个发行版不兼容,甚至与同一发行版的另一个次要版本也不兼容)
- 使用带有FAT32文件系统的usb记忆棒,您将在符号链接方面遇到麻烦