Как скомпилировать с другим набором библиотек. Когда я компилирую на компьютере 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.