如何與另一個庫進行編譯。當我在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 /調試/ 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()」 ......很多錯誤...
我們如何編譯另一個庫?爲什麼我必須明確指向libc庫(不應該是自動的)? 我在網上做了一些搜索,一些文章指出我錯過了crt0.o文件,但是我在i386目錄樹上找不到這個文件。
進行了深入的討論,所以,我怎麼可以編譯使用舊的libstdC++,那就是我試圖完成。我找不到一種方法指出編譯器使用較舊的libstdC++。 – 2010-09-16 14:10:45
@Dennis Miller您需要使用較老的C++編譯器,通常您需要類似g ++ - 4.1甚至g ++ - 3.4的版本,具體取決於您定位的系統是什麼。 – Artyom 2010-09-16 14:13:54