Как скомпилировать другой набор библиотек. Когда я компилирую компьютер 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 объект/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
станд :: ios_base :: Init :: Init()» ... Лот больше ошибок ...
Как скомпилировать с другой библиотекой? Почему я должен объяснить, чтобы библиотека libc (не должна ли она быть автоматической)? Я сделал несколько поисков в Интернете, и в некоторых статьях указано, что мне не хватает файла crt0.o, однако я не могу найти этот файл в дереве каталогов i386.
Так как я могу скомпилировать, используя старую libstdC++, то есть то, что я пытаюсь сделать. Я не могу найти способ указывать компилятору на использование более старого libstdC++. –
@Dennis Miller Вам нужно использовать более старый компилятор C++, обычно вам нужно что-то вроде g ++ - 4.1 или даже g ++ - 3.4 в зависимости от того, на какую систему вы нацеливаете. – Artyom