Comment compiler avec un autre ensemble de bibliothèques. Quand je compile sur l'ordinateur i686 Fedora 13, cela fonctionne très bien. Cependant, lorsque je prends l'exécutable (via une clé USB) et que j'essaie de l'exécuter sur un autre ordinateur i386, le message d'erreur suivant s'affiche.Compilation croisée avec une autre bibliothèque
/usr/lib/libstdc++.so.6: version ‘GLIBCXX_3.4.9’ not found (required by ./Recorder)
Ok, donc je dois compiler en utilisant les bibliothèques i386 donc c'est compatible. Cependant, la machine i368 n'a pas de compilateur. Je dois donc trouver un moyen de compiler en utilisant les bibliothèques de machines i386. Donc, je copie tout l'arborescence de répertoires i386 dans la machine i686 et j'essaie d'utiliser -nostdlib et de pointer toutes les bibliothèques pour utiliser le i386, et j'ai joué avec les réglages toute la journée et je n'ai pas trouvé d'endroit. Je suis allé de l'avant et j'ai essayé de faire un petit programme en tant que test et de voir si je pouvais le faire croiser en premier. Toujours pas de chance.
/// \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;
}
Je compile le programme avec cette commande.
g++ -O3 -pedantic -Wextra -Wall -g -c /home/dmiller3/Experiments/Test2/main.cpp -o obj/Debug/main.o
Je reçois l'erreur lors de la liaison.
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: En fonction
__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() » ... beaucoup plus d'erreurs ...
Comment compiler avec une autre bibliothèque? Pourquoi dois-je pointer vers la bibliothèque libc (cela ne devrait-il pas être automatique)? J'ai fait quelques recherches sur internet, et certains articles indiquent qu'il me manque un fichier crt0.o, mais je ne trouve pas ce fichier dans l'arborescence de l'i386.
Alors, comment puis-je compiler en utilisant plus libstdC++, c'est-ce que je suis en train d'accomplir. Je ne peux pas trouver un moyen de pointer le compilateur pour utiliser l'ancien libstdC++. –
@Dennis Miller Vous devez utiliser un compilateur C++ plus ancien, vous aurez généralement besoin de quelque chose comme g ++ - 4.1 ou même g ++ - 3.4 selon le système que vous ciblez. – Artyom