相同的android cmake git项目在一台Ubuntu机器上编译良好,但在另一台Ubuntu计算机上编译不好,即
Same android cmake git project compiles well on one Ubuntu machine but does not compile on another Ubuntu machine even the entire project is the same
我正在开发一个android cmake项目,该项目在我的32位Ubuntu 12.04机器上成功编译(我称之为WorkMachine)。当我想在家编译它时,我安装了一个32位的Ubuntu 12.04虚拟机(我会称之为HomeMachine),我在上面克隆了项目,当我开始编译时,它会因错误而阻塞。
CMAKE_CFLAGS are:
CMAKE_CXXFLAGS are:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/raa/Dropbox/Demo/android_build
[ 0%] Built target bitstream
[ 0%] Built target distrat
[ 1%] Built target fisher
[ 1%] Built target gtest
[ 7%] Built target jpeg-8c
[ 7%] Built target map
[ 8%] Built target resampler
[ 9%] Built target timer
[ 92%] Built target fftw3f-3
[ 96%] Built target vlfeat
[ 96%] Built target extract_shared
[ 97%] Built target shared
[ 97%] Built target cssc_train
Linking CXX executable ../../bin/extract
/home/raa/Dropbox/Demo/libraries/fftw-3.3.3/api/configure.c:28: error: undefined reference to 'fftwf_dft_conf_standard'
collect2: error: ld returned 1 exit status
make[2]: *** [../bin/extract] Error 1
make[1]: *** [src/CMakeFiles/extract.dir/all] Error 2
make: *** [all] Error 2
这里我报告的是gcc版本(两台计算机上相同)
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
但这怎么可能呢?问题似乎不是由一些cmake缓存或类似的chaches引起的,因为如果我在WorkMachine上的另一个目录上git克隆项目,代码也会编译得很好。我可以检查什么来解决问题?如果您需要更多详细信息,请询问我。
谢谢你抽出时间。
Riccardo
Riccardos问题的解决方案是将ar
的命令行参数从r更改为q(请参阅手册页了解差异,基本上q不检查重复)
通过
SET(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
您可能想检查CMAKE_AR
是否为"ar"(在其他系统上可能不同)
哇!解决了!这确实是cmake的一个奇怪行为:我有三个conf.c.文件,必须合并到一个静态库中。当cmake运行AR程序来创建库时,它执行了一个命令,类似于:
ar cr dir1/source1.c dir1/source2.c ... dft/conf.c rdft/conf.c
ar r reodft/conf.c dir2/source3.c
因此,可能是由于要链接的对象文件数量巨大,cmake将ar命令拆分为两个命令,但第二个命令覆盖了第一个命令添加的两个文件conf.c.中的一个,因此第一个ar命令定义的符号丢失了!这显然是ar中的一个错误,因为即使源文件相同,内容也可能不同,因此符号不会被删除。感谢大家!你的建议使我找到了正确的解决方案!
相关文章:
- 在 Ubuntu 18.04 上编译 GLSL 着色器时"不支持 GLSL 3.30"?
- 在 Ubuntu 中编译 SuiteSparse,在安装 CHOLMOD 时中断
- 如何在 Ubuntu 上编译 OpenGL 项目?
- 在 ubuntu 焦点上编译虚幻引擎 4.25 时出错
- 在 Ubuntu 16.04 LTS 上使用 c++ 编译问题?
- 编译问题与 Ubuntu Linux
- Ubuntu 下的 Cmake 和 Intel IPP 的编译问题
- 在Linux/Ubuntu中编译openCV应用程序时,如何解决未定义的引用cv:..?
- 如何解决我在 Ubuntu 19.04 下使用 GLFW 时遇到的这个编译问题?
- wxWebView在Ubuntu上的编译问题
- 如何在Ubuntu中使用Visual Studio代码编译C++代码
- 在 Ubuntu 18.04 上,我编译的 cpp 可执行文件找不到 VTK7 依赖项
- 在 Xubuntu 19.04 中编译 c++ 是否应该与在 Ubuntu 18.04 中编译 c++ 不同
- 针对 ubuntu 和 Mac 编译的差异
- G++ 编译:在 Ubuntu 18.04 上对 'ATL_<...>' 的未定义引用
- cmake cuda在Windows上单独的编译静态LIB链接错误,但在Ubuntu上没有
- 加密蛋白使编译问题Ubuntu
- Open AL 的函数在 ubuntu 中使用 g++ 编译时给出未定义引用的错误
- 拥有LLVM IR库如何从Ubuntu将其交叉编译到iOS,Android,Windows和Mac?
- C++ 在 minGW-W64 g++ 中编译的代码不能使用 Ubuntu g++ 编译