我正在使用arm-linux-androideabi-g++编译器.当我尝试编译一个简单的"你好,世界!" 程序编译好.当我通过在该代码中添加一个简单的异常处理来测试它时它也可以工作(添加之后-fexceptions..我猜它默认是禁用的).
这适用于Android设备,我只想使用CMake,而不是ndk-build.
例如 - first.cpp
#include <iostream>
using namespace std;
int main()
{
try
{
}
catch (...)
{
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions
它没有问题......
问题 ...我试图用CMake文件编译文件.
我想添加-fexceptions标志.我试过了
set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" )
Run Code Online (Sandbox Code Playgroud)
和
set ( CMAKE_C_FLAGS "fexceptions")
Run Code Online (Sandbox Code Playgroud)
它仍然显示错误.
我有一个带有Makefile的小项目,我试图转换为CMake,主要是为了获得CMake的经验.出于此示例的目的,项目包含一个源文件(C++,虽然我认为该语言不是特别相关)和一个我从其他地方复制过的静态库文件.为了论证,假设库的源代码不可用; 我只有.a文件和相应的标题.
我手工制作的Makefile包含以下构建规则:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.我如何告诉CMake重现这个?当然,这不是字面上的精确makefile,而是包含等效链接命令的东西.我尝试过明显但天真的方式,比如
add_executable(main main.cpp libbingitup.a)
Run Code Online (Sandbox Code Playgroud)
要么
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
Run Code Online (Sandbox Code Playgroud)
以及与各种事物link_directories(.)或add_library(bingitup STATIC IMPORTED)等,但没有到目前为止,结果在一个成功的连锁.我该怎么办?
版本详细信息:Linux(Kubuntu 12.04)上的CMake 2.8.7和GCC 4.6.3
我正在尝试编译这样的C++程序:
$ g++ -o Sniffer_Train main.cpp Sniffer_train.cpp Sniffer_train.h -lmysqlclient -lpcap
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
/usr/bin/ld: /tmp/cct6xeXD.o: undefined reference to symbol
'pthread_join@@GLIBC_2.4' //lib/arm-linux-gnueabihf/libpthread.so.0:
error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我不知道这个错误意味着什么.任何帮助将不胜感激.