Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Chroot交叉编译未定义的符号_C++_Linux_Ubuntu_Gcc_Chroot - Fatal编程技术网

C++ Chroot交叉编译未定义的符号

C++ Chroot交叉编译未定义的符号,c++,linux,ubuntu,gcc,chroot,C++,Linux,Ubuntu,Gcc,Chroot,我正在尝试将应用程序从Ubuntu 14.04“交叉编译”到Debian Wheezy 7.9(两者之间不兼容的libc版本)。我已经安装了chroot环境,在那里我安装了debian Wheezy。我在Ubuntu上使用代码块进行编译。我已经设置了这个项目,所以我只使用chroot环境中的东西(即gcc、libc等)。我还使用了-nodefaultlibs并手动链接所有内容。但即使这样,我也有一些未解决的符号,不知道它们来自哪里 /var/chroot/usr/lib/gcc/x86_64-l

我正在尝试将应用程序从Ubuntu 14.04“交叉编译”到Debian Wheezy 7.9(两者之间不兼容的libc版本)。我已经安装了chroot环境,在那里我安装了debian Wheezy。我在Ubuntu上使用代码块进行编译。我已经设置了这个项目,所以我只使用chroot环境中的东西(即gcc、libc等)。我还使用了
-nodefaultlibs
并手动链接所有内容。但即使这样,我也有一些未解决的符号,不知道它们来自哪里

/var/chroot/usr/lib/gcc/x86_64-linux-gnu/4.7/libgcc_s.so: undefined reference to `memcpy@GLIBC_2.14'
/var/chroot/usr/lib/x86_64-linux-gnu/librt.so: undefined reference to `__clock_getres@GLIBC_PRIVATE'
/var/chroot/usr/lib/x86_64-linux-gnu/librt.so: undefined reference to `__pthread_get_minstack@GLIBC_PRIVATE'
/var/chroot/usr/lib/x86_64-linux-gnu/librt.so: undefined reference to `__clock_gettime@GLIBC_PRIVATE'
/var/chroot/usr/lib/x86_64-linux-gnu/librt.so: undefined reference to `__clock_nanosleep@GLIBC_PRIVATE'
/var/chroot/usr/lib/x86_64-linux-gnu/librt.so: undefined reference to `__clock_getcpuclockid@GLIBC_PRIVATE'
/var/chroot/usr/lib/x86_64-linux-gnu/librt.so: undefined reference to `__clock_settime@GLIBC_PRIVATE'
/var/chroot/usr/lib/gcc/x86_64-linux-gnu/4.7/libgcc_s.so没有引用2.14(通过objdump查看)

这是我的命令行:

g++-4.7 -L../Debug
-L../dependencies/lib/debug
-L/var/chroot/usr/lib/gcc/x86_64-linux-gnu/4.7
-L/var/chroot/lib/x86_64-linux-gnu
-L/var/chroot/usr/lib/x86_64-linux-gnu
-L/var/chroot/usr/lib
-o ../Debug/xxx obj/Debug/src/xxx.o
-nostdlib -Wl,-t
 /var/chroot/usr/lib/x86_64-linux-gnu/crt1.o
 /var/chroot/usr/lib/x86_64-linux-gnu/crti.o
 /var/chroot/usr/lib/gcc/x86_64-linux-gnu/4.7/crtbegin.o
 -lboost_system-gcc47-mt-d-1_55
 -lboost_filesystem-gcc47-mt-d-1_55
 -lboost_program_options-gcc47-mt-d-1_55
 -lboost_thread-gcc47-mt-d-1_55
 -l:libpthread-2.13.so
 -lxxxD
 -l:libcrypto++.a
 -lgcc_s
 -lstdc++
 -lrt
 -lm
 -l:libc.so.6
 -l:libgcc.a
 -l:libc_nonshared.a
 -l:ld-linux-x86-64.so.2
 /var/chroot/usr/lib/gcc/x86_64-linux-gnu/4.7/crtend.o
 /var/chroot/usr/lib/x86_64-linux-gnu/crtn.o
boost库在chroot-ed环境中编译,并作为静态libs生成。我已经设置了gcc/ld标志以按完整路径打印所有链接的内容,实际上所有内容都是从chroot加载的


有人知道会出什么问题吗?我选择的道路可行吗?

嗯。。。为什么要使用代码块,而不是简单地在环境中使用chroot和make?Oo我的意思是,如果你说的是交叉编译到windows或ARM或64/32,好吧,但你想要的似乎只是编译到另一个具有其他lib版本的发行版…因为项目已经在代码块中设置好了,如果出现问题,你希望能够在那里调试它。但不幸的是,我无法从代码块导出makefile,而且我真的不知道如何从头开始编写(我认为这会很耗时)。这是一个丑陋的黑客,它使用代码块(在主机上)编译所有对象文件,并仅在chroot环境中运行link命令。不要。。。曾经自己编写一个makefile(非常小的个人项目除外)。。。有一些工具可以达到这个目的,比如伟大的cmake。你想调试一个交叉编译的应用程序吗?我希望您知道您不能直接执行此操作:您必须使用远程调试器。(gdb可以很好地处理这个问题,但我不知道C::B如何管理它)。我建议您在尝试这样做之前,先记录一下编译和linux。作为一条规则:当您可以编译本机时,千万不要尝试交叉编译(除非您有一个很好的理由,比如在“嵌入式和慢速芯片”上)不管怎样,看起来要么你忘记了一个库,要么你使用的版本库对你的项目来说太低了,要么它的一个依赖项,呃……为什么你要使用代码块,而不是简单地在你的环境中使用chroot和make?哦,我的意思是,如果你说的是交叉编译到windows或ARM或64/32,好吧,但是你想看到什么ms只是想用其他lib版本编译到另一个发行版…因为项目已经在代码块中设置,如果出现问题,希望能够在那里调试它。但不幸的是,我无法从代码块导出makefile,我真的不知道如何从头开始编写(我认为这会很耗时)。这是一个丑陋的黑客程序,它使用代码块(在主机上)编译所有对象文件,并仅在chroot环境中运行link命令。不要…永远…自己编写makefile(非常小的个人项目除外)…有一些工具可以达到这个目的,比如伟大的cmake。你想调试一个交叉编译的应用程序吗?我希望你知道你不能直接调试:你必须使用远程调试器。(gdb可以很好地使用它,但我不知道C::B如何管理它)。我建议你在尝试这样做之前先记录一下编译和linux。作为一条规则:当你可以编译本机时,千万不要尝试交叉编译(除非你有很好的理由,比如在“嵌入式和慢速芯片”上)无论如何,您可能忘记了一个库,或者您使用的版本库对于您的项目来说太低,或者它的一个依赖项