我有一個將boost庫鏈接到我的交叉編譯的C++程序的問題。 我編寫的代碼與Ubuntu 12.04下的CodeSourcery交叉編譯,用於arm-target(Pandaboard,也是Ubuntu 12.04)。 編譯沒有庫的簡單測試程序可以正常工作,即使使用靜態庫的OpenCV也能正常工作。連接boost庫時程序退出時沒有錯誤
當鏈接Boost庫(-lboost_thread -lboost_system)程序編譯沒有錯誤,但在目標執行時,它crosscompiled,什麼都不會發生:
但這裏連接升壓1.52.0庫時的問題。
程序無錯地完成,就好像它從未執行過一樣。
當CodeSourcery與CodeSourcery交叉編譯時,沒有鏈接boost庫:一切工作正常。 用g ++本地編譯:一切都很好。
出於測試目的,我剝奪了我的代碼下面幾行: (誤差甚至出現時不使用計時功能只是鏈接使得差)
的main.cpp
#include <iostream>
using namespace std;
#include<boost/chrono.hpp>
int main(int argc, char* argv[]) {
cout << "!!!this test worked!!!" << endl;
return 0;
}
鏈接器命令是(下蝕):
arm-none-linux-gnueabi-g++ -L/home/xy/arm-none-linux-gnueabi/lib -o "testARM" ./src/main.o -lpthread -lboost_thread -lboost_system
升壓文庫具有CodeSourcery臂-NONE-Linux的gnueabi-G ++ followi交叉編譯ng this guide。 我將它們全部複製到/ usr/lib文件夾中,並將/ usr/lib添加到PATH和LD_LIBRARY_PATH中。
我試着用eclipse和遠程調試一樣:啓動程序..程序終止於1. 但是沒有任何結果。
它甚至不打印錯誤或抱怨丟失的東西。 因此,現在我不能想到更多我可以谷歌,我還沒有嘗試過...
你能給我任何提示什麼,我可以嘗試解決這個問題嗎?
非常感謝提前!
更新:
當運行我的strace的測試程序,該日誌包含以下信息:
$ vi strace-testARM.log 22:23:56.511385 execve("./testARM", ["./testARM"], [/* 17 vars */]) = 0 22:23:56.512789 brk(0) = 0xfae000 22:23:56.512972 uname({sys="Linux", node="panda", ...}) = 0 22:23:56.514010 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 22:23:56.514315 mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f9b000 22:23:56.514498 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) 22:23:56.514742 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 22:23:56.514986 fstat64(3, {st_mode=S_IFREG|0644, st_size=52288, ...}) = 0 22:23:56.515353 mmap2(NULL, 52288, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f72000 22:23:56.515536 close(3) = 0 22:23:56.515688 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 22:23:56.515902 open("/lib/arm-linux-gnueabihf/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 22:23:56.516207 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\5P\0\0004\0\0\0"..., 512) = 512 22:23:56.516451 lseek(3, 66332, SEEK_SET) = 66332 22:23:56.516573 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1400) = 1400 22:23:56.516787 lseek(3, 65924, SEEK_SET) = 65924 22:23:56.516909 read(3, "A6\0\0\0aeabi\0\1,\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 55) = 55 22:23:56.517153 fstat64(3, {st_mode=S_IFREG|0755, st_size=100802, ...}) = 0 22:23:56.517519 mmap2(NULL, 107024, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f57000 22:23:56.517642 mprotect(0xb6f67000, 28672, PROT_NONE) = 0 22:23:56.517794 mmap2(0xb6f6e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf) = 0xb6f6e000 22:23:56.517977 mmap2(0xb6f70000, 4624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6f70000 22:23:56.518160 close(3) = 0 22:23:56.518313 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 22:23:56.518557 open("/lib/arm-linux-gnueabihf/tls/v7l/neon/vfp/libboost_thread.so.1.52.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 22:23:56.518832 stat64("/lib/arm-linux-gnueabihf/tls/v7l/neon/vfp", 0xbea34ea8) = -1 ENOENT (No such file or directory) 22:23:56.519076 open("/lib/arm-linux-gnueabihf/tls/v7l/neon/libboost_thread.so.1.52.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file ... [ lots of other directories with file not found ] ... 22:23:56.545382 stat64("/usr/lib/neon/vfp", 0xbea34ea8) = -1 ENOENT (No such file or directory) 22:23:56.545565 open("/usr/lib/neon/libboost_thread.so.1.52.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 22:23:56.545748 stat64("/usr/lib/neon", 0xbea34ea8) = -1 ENOENT (No such file or directory) 22:23:56.545932 open("/usr/lib/vfp/libboost_thread.so.1.52.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 22:23:56.546115 stat64("/usr/lib/vfp", 0xbea34ea8) = -1 ENOENT (No such file or directory) 22:23:56.546298 open("/usr/lib/libboost_thread.so.1.52.0", O_RDONLY|O_CLOEXEC) = 3 22:23:56.546481 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\324\331\0\0004\0\0\0"..., 512) = 512 22:23:56.546755 lseek(3, 121020, SEEK_SET) = 121020 22:23:56.546878 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1200) = 1200 22:23:56.547091 lseek(3, 119052, SEEK_SET) = 119052 22:23:56.547213 read(3, "A(\0\0\0aeabi\0\1\36\0\0\0\0055TE\0\6\4\10\1\t\1\22\4\24\1\25"..., 41) = 41 22:23:56.547396 exit_group(1) = ?
更新2:
我編譯我的編上一個Ubuntu主機RAM,文件轉移到PANDABOARD和發出以下命令的建議通過@ShaunMarko:
`ldd testARM` => `not a dynamic executable`
`file testARM` => `testARM: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped`
`file libboost_thread.so.1.52.0` => `libboost_thread.so.1.52.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped`
添加-v -H
到編譯克++表達式我得到:
... /xy/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.2/../../../../arm-none-linux-gnueabi/include/boost/utility/result_of.hpp
COLLECT_GCC_OPTIONS='-O0' '-g3' '-Wall' '-c' '-fmessage-length=0' '-v' '-H' '-MMD' '-MP' '-MF' 'main.d' '-MT' 'main.d' '-o' 'main.o' '-shared-libgcc' '-march=armv5te' '-mtls-dialect=gnu' '-funwind-tables' '-D' '__CS_SOURCERYGXX_MAJ__=2012' '-D' '__CS_SOURCERYGXX_MIN__=9' '-D' '__CS_SOURCERYGXX_REV__=64'
/xy/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.2/../../../../arm-none-linux-gnueabi/bin/as -v -march=armv5te -meabi=5 -o main.o /tmp/cceTwLmn.s
GNU assembler version 2.23.51 (arm-none-linux-gnueabi) using BFD version (Sourcery CodeBench Lite 2012.09-64) 2.23.51.20120829
COMPILER_PATH=/xy/CodeSourcery/bin/../libexec/gcc/arm-none-linux-gnueabi/4.7.2/:/xy/CodeSourcery/bin/../libexec/gcc/:/xy/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.2/../../../../arm-none-linux-gnueabi/bin/
LIBRARY_PATH=/xy/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.2/:/xy/CodeSourcery/bin/../lib/gcc/:/xy/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.2/../../../../arm-none-linux-gnueabi/lib/:/xy/CodeSourcery/bin/../arm-none-linux-gnueabi/libc/lib/:/xy/CodeSourcery/bin/../arm-none-linux-gnueabi/libc/usr/lib/
COLLECT_GCC_OPTIONS='-O0' '-g3' '-Wall' '-c' '-fmessage-length=0' '-v' '-H' '-MMD' '-MP' '-MF' 'main.d' '-MT' 'main.d' '-o' 'main.o' '-shared-libgcc' '-march=armv5te' '-mtls-dialect=gnu' '-funwind-tables' '-D' '__CS_SOURCERYGXX_MAJ__=2012' '-D' '__CS_SOURCERYGXX_MIN__=9' '-D' '__CS_SOURCERYGXX_REV__=64'
**** Build Finished ****
(這是最後一部分,上面列出了包含的標題噸。在XY路徑是安裝在我的主目錄CodeSourcery的)
你可以用strace(https://wiki.ubuntu.com/Strace)在目標上運行你的程序嗎? –
感謝您的回答。我上面張貼了strace-log。你能從中得到任何有用的信息嗎? – Felix
您可以在目標上發佈「'ldd' testARM」以確保所有參考都已解決。 –