[英]Cross compile with another library
如何使用另一套庫進行編譯。 當我在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
/c++/4.4.4__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()的__static_initialization_and_destruction_0': /usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/iostream:72: undefined reference to
...更多錯誤...
我們如何與另一個庫一起編譯? 為什么我必須明確指向libc庫(這不是自動的)? 我已經在Internet上進行了一些搜索,並且一些文章指出我缺少crt0.o文件,但是在i386目錄樹中找不到此文件。
/usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by ./Recorder)
您嘗試運行的計算機上的libstdc ++比您在其上編譯的libstdc ++老,這就是為什么它抱怨
實際上,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>
一些注意事項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.