如何使用另一组库进行编译。当我在i686 Fedora 13计算机上编译时,它工作正常。但是,当我拿到可执行文件(通过thumbdrive)并尝试在另一台i386机器上运行它时,我收到以下错误消息。
/usr/lib/libstdc++.so.6: version ‘GLIBCXX_3.4.9’ not found (required by ./Recorder)
好的,所以我必须使用i386库进行编译才能兼容。但是,i368机器没有编译器。所以我必须找到一种使用i386机器库进行交叉编译的方法。所以我将所有i386目录树复制到i686机器上并尝试使用-nostdlib并指向所有库以使用i386,并且我整天都在使用设置并且没有任何地方。
我继续尝试制作一个小程序作为测试,看看我是否可以让它先交叉编译。仍然没有运气。
/// \file main.cpp
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
int main()
{
std::cout << "Testing!" << std::endl;
#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
printf("POSIX Thread Priority Scheduling supported\n");
#else
#warning "POSIX Thread Priority Scheduling NOT supported."
#endif
#ifdef _POSIX_THREAD_PRIO_PROTECT
printf("POSIX Thread Priority Ceiling supported");
#else
#warning "POSIX Thread Priority Ceiling NOT supported"
#endif
#ifdef _POSIX_THREAD_PRIO_INHERIT
printf("POSIX Thread Priority Ceiling supported");
#else
#warning "POSIX Thread Priority Ceiling NOT supported"
#endif
return 0;
}
我用这个命令编译程序。
g++ -O3 -pedantic -Wextra -Wall -g -c /home/dmiller3/Experiments/Test2/main.cpp -o obj/Debug/main.o
链接时我收到错误。
g++ -L../../TargetLibraries/cw_1901-glibc_std-standard-dist/lib -o bin/Debug/Test2 obj/Debug/main.o -nostdlib ../../TargetLibraries/cw_1901-glibc_std-standard-dist/lib/libpthread-2.5.so ../../TargetLibraries/cw_1901-glibc_std-standard-dist/lib/libc-2.5.so
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to
00000000080482a0 obj / Debug / main.o:在函数
__static_initialization_and_destruction_0': /usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/iostream:72: undefined reference to
中std :: ios_base :: Init :: Init()' ......还有更多错误...
我们如何使用其他库编译?为什么我必须明确指向libc库(这不应该是自动的)? 我在互联网上做了一些搜索,有些文章说我错过了一个crt0.o文件,但我在i386目录树上找不到这个文件。
答案 0 :(得分:1)
/usr/lib/libstdc++.so.6: version ‘GLIBCXX_3.4.9’ not found (required by ./Recorder)
您尝试运行的计算机上的libstdc ++比您编译的计算机上的libstdc ++更旧,这就是为什么它在抱怨
答案 1 :(得分:0)
GCC实际上硬编码了源代码中的一些路径。您最好的办法是找出目标系统上安装的glibc版本,然后下载该系统的编译器。
您能更详细地描述一下您的系统吗?它运行Linux吗?哪个内核和glibc / ulibc版本?
在类似的情况下我必须做的是在编译时指定包含和链接路径,所以你最终得到这样的东西:
<path to g++>/g++ -I<includes for my version system libs> -Wl,--rpath-link <custom libs path> -L <same custom libs path>
一些注意事项: