我正在尝试交叉编译一个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安装了交叉编译器,但我看不到在不破坏构建系统的情况下获取特定目标的库文件的方法。
发布于 2013-06-13 04:54:42
对于后代:如果您想包含其他库并遇到此类错误消息:
使用-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>重要的部分是第二行。这个问题在构建机器和运行它的机器上都得到了正确的解决。
https://stackoverflow.com/questions/17074305
复制相似问题