未定义的参考在 arm chromebook 上编译 taskwarrior
Posted
技术标签:
【中文标题】未定义的参考在 arm chromebook 上编译 taskwarrior【英文标题】:undefined reference compiling taskwarrior on arm chromebook 【发布时间】:2019-05-18 19:45:48 【问题描述】:我尝试在 termux 会话中的 armv81 chromebook 上构建 task-2.5.1。由于构建依赖关系它没有工作所以我安装它们然后解压缩并在一个新的目录中开始。当我运行make VERBOSE=1
时,我在链接时得到了undefined reference to __atomic_fetch_add_4
...
[ 98%] Linking CXX executable lex
cd /data/data/com.termux/files/home/src/task-2.5.1/src && /data/data/com.termux/files/usr/bin/cmake -E cmake_link_script CMakeFiles/lex_executable.dir/link.txt --verbose=1
/data/data/com.termux/files/usr/bin/c++ -Wall -Wsign-compare -Wreturn-type -std=c++11 -stdlib=libc++ -O3 -DNDEBUG -rdynamic CMakeFiles/lex_executable.dir/lex.cpp.o -o lex libtask.a commands/libcommands.a columns/libcolumns.a libtask.a -lgnutls -luuid
/data/data/com.termux/files/usr/bin/arm-linux-androideabi-ld: libtask.a(Nibbler.cpp.o): in function `Nibbler::Nibbler(Nibbler const&)':
Nibbler.cpp:(.text+0x8c): undefined reference to `__atomic_fetch_add_4'
/data/data/com.termux/files/usr/bin/arm-linux-androideabi-ld: libtask.a(Nibbler.cpp.o): in function `Nibbler::operator=(Nibbler const&)':
Nibbler.cpp:(.text+0xe0): undefined reference to `__atomic_fetch_add_4'
/data/data/com.termux/files/usr/bin/arm-linux-androideabi-ld: Nibbler.cpp:(.text+0x104): undefined reference to `__atomic_fetch_add_4'
/data/data/com.termux/files/usr/bin/arm-linux-androideabi-ld: libtask.a(Nibbler.cpp.o): in function `Nibbler::~Nibbler()':
Nibbler.cpp:(.text+0x174): undefined reference to `__atomic_fetch_add_4'
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/lex_executable.dir/build.make:90: src/lex] Error 1
make[2]: Leaving directory '/data/data/com.termux/files/home/src/task-2.5.1'
make[1]: *** [CMakeFiles/Makefile2:175: src/CMakeFiles/lex_executable.dir/all] Error 2
make[1]: Leaving directory '/data/data/com.termux/files/home/src/task-2.5.1'
make: *** [Makefile:152: all] Error 2
我发现 this discussion 关于 arm 构建中未定义的引用。我尝试将 -latomic 添加到 CMakeFiles/task_executable.dir/link.txt 但它没有改变输出。
任何想法如何解决这个问题?
【问题讨论】:
可能在 github 上的这个线程中的答案会有所帮助? github.com/android-ndk/ndk/issues/589 "它没有改变输出" - 它至少应该改变编译器/链接器命令行。你能用-latomic
发布错误日志吗?
我还没有答案,但来自@CiaPan 的链接似乎确实相关,谢谢。我认为输出没有改变,因为我读到它在某些情况下不会改变。我会尽快重现它。我仍在寻找如何 a) 理解和 b) 解决这个问题,以便我可以成功地链接它并继续前进。
【参考方案1】:
非常感谢this issue 中的wbsch(发布在此之后)提供指向known fix 的链接,该链接在我的机器上成功,从CMakeLists.txt 中删除了三行。
【讨论】:
以上是关于未定义的参考在 arm chromebook 上编译 taskwarrior的主要内容,如果未能解决你的问题,请参考以下文章
ARM Chromebook 上的 Android 开发环境?
Android Studio 无法在配备 32 位 Ubuntu 12.04 w/JDK-8 的三星 ARM Chromebook 上加载