1

我试图为 ARM 处理器系统交叉编译一个项目。我可以完成构建步骤,但链接失败。

有问题的应用程序与liblog4cpp和链接libmysql。为了使构建工作,我从 ARM 系统中复制了相关文件,但似乎存在运行时依赖项。具体错误:

/usr/lib/gcc/arm-linux-gnueabi/4.4.5/../../../../arm-linux-gnueabi/bin/ld:  
  warning: libz.so.1, needed by /usr/lib/mysql_arm/libmysqlclient.so,   
  not found (try using -rpath or -rpath-link)   
/usr/lib/mysql_arm/libmysqlclient.so: undefined reference to `compress'
/usr/lib/mysql_arm/libmysqlclient.so: undefined reference to `uncompress'
collect2: ld returned 1 exit status

在我的构建步骤中,我链接到 libz.so 但使用的建议-rpath让我想知道 mysql 库是否需要运行时链接。如果我在我的构建系统上设置这个值,当它在运行系统上找不到相应的路径时会不会感到不安?

或者 - 有没有办法apt-get为其他目标安装文件?我从 emdebian 安装了交叉编译器,但我没有看到一种方法可以在不破坏构建系统的情况下获取特定目标的库文件。

4

1 回答 1

1

对于后代:如果您想包含其他库并遇到此类错误消息:

使用-rpath-link指向包含其他运行时库的文件夹。需要注意的是,您的构建语句(在本例中为 arm-linux-gnueabi-g++)必须在这样的命令前加上-Wl,。所以生成的命令看起来像:

arm-linux-gnueabi-g++ -Wall -O0 <other params here> file0.o file1.o 
  -Wl,-rpath-link /usr/lib/<path to arm library for run-time> 
  -L <some other library path> -l <something like mysql or bluetooth>

重要的部分是第二行。这可以在构建机器和运行它的机器上正确解决。

于 2013-06-12T20:54:41.760 回答