USB GCC开发环境与库

时间:2011-09-02 18:25:34

标签: gcc linker g++ usb

我正试图在usb棒上获得一些环境来开发C ++代码。我计划使用其他计算机,大部分时间是linux,使用g ++和make从命令行处理这个问题。 / p>

问题是我需要使用计算机没有的一些库,比如Lua和OpenGL。我无法将它们添加到正常目录中,我在这些计算机上没有root。我发现的大多数解决方案都涉及到将东西放在/ usr / lib /等中,但我不能这样做。我还尝试添加诸如'-L / media // lib'之类的选项,这是保存它们的地方,但它不起作用。在编译时,我得到了第一次切换到未安装库的操作系统时出现的相同错误。

在/ usr /我以外的计算机上是否可以放置它们,或者让gcc“看到”它们的方法?

1 个答案:

答案 0 :(得分:2)

您需要的不仅仅是能够使用这些库编译代码的库。 (我在这里假设Linux,在OSX,BSD,Cygwin,Mingw等方面可能略有不同......)

对于开发,当代码使用库时,您需要这三件事:

  • 库头文件,.h文件
  • 库开发文件libXXX.so或libXXX.a通常为
  • 库运行时文件libXXX.so.Y,其中Y是版本号。如果您在库中静态链接,则不需要这些。

你似乎错过了头文件(?)将它们添加到你的usb棒,比如/ media / include

开发

  • 在编译源代码时使用(例如)编译器标志-I/media/include来引用头文件的非标准位置。
  • 使用编译器/链接器标志-L/media/lib来引用库的非标准位置。

您可能错过了第一步。

运行

对于动态链接库,系统将仅从默认位置加载这些库,通常是/ lib /,/ usr / lib /

了解ldd工具以帮助调试此步骤。

在运行程序时,您需要告诉系统在哪里加载其他库,这里有3个替代方案:

  • 全系统:编辑/etc/ld.so.conf并在那里添加/ media / libs。之后运行ldconfig -a
  • 本地,仅限当前的shell。设置LD_LIBRARY_PATH环境变量以引用/ media / lib,运行export LD_LIBRARY_PATH=/media/lib
  • 可执行文件:对可执行文件中的非标准库路径进行硬编码。您在创建可执行文件时将其添加到链接步骤:-Wl,-rpath,/media/lib

可能还有其他原因导致事情无法解决,如果有的话, 向我们展示ls -l / media / libs的输出,以及放置库头文件的位置,用于编译/链接的命令行,以及你得到的确切错误。

  • 缺少标题和/或开发库(对于动态库,通常有一个从libXXX.so到libXXX.so.Y的符号链接,链接器需要libXXX.so,它不会直接查看libXXX.so .Y)
  • 使用与您当前的操作系统/体系结构不兼容的库。 (在一个Linux发行版上编译的库通常与另一个发行版不兼容,或者甚至是同一个发行版的另一个次要版本)
  • 使用带有FAT32文件系统的usb棒,你会遇到符号链接问题..