我正在尝试在 ubuntu 14.04 下的 Clion 中编写 CMakeList.txt,如下所示:
cmake_minimum_required(VERSION 2.8.3)
project(ify)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++11")
## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED)
include_directories(
${catkin_INCLUDE_DIRS}
/usr/local/include
/usr/include
include
)
include_directories(
include/
)
link_directories(
/usr/local/lib
/usr/lib
libs/x64
/usr/lib/x86_64-linux-gnu
)
#set(SOURCE_FILES main.cpp)
#add_executable(ify ${SOURCE_FILES})
add_executable(ify main.cpp)
target_link_libraries(ify ${catkin_LIBRARIES}
libmsc.so
libasound.so
)
Run Code Online (Sandbox Code Playgroud)
当我运行时它告诉我:
/home/think/ClionProjects/ify/libs/x64/libmsc.so: undefined reference to `dlopen'
/home/think/ClionProjects/ify/libs/x64/libmsc.so: undefined reference to `dlclose'
/home/think/ClionProjects/ify/libs/x64/libmsc.so: undefined reference to `dlerror'
/home/think/ClionProjects/ify/libs/x64/libmsc.so: undefined reference to `dlsym'
/home/think/ClionProjects/ify/libs/x64/libmsc.so: undefined reference to `pthread_create'
Run Code Online (Sandbox Code Playgroud)
我搜索后尝试了一些方法:
1:像这样添加ldl:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -ldl -std=c++11")
Run Code Online (Sandbox Code Playgroud)
2:添加target_link_libraries:
target_link_libraries(ify
dl
pthread
)
Run Code Online (Sandbox Code Playgroud)
3:
set(CMAKE_SHARED_LINKER_FLAGS -ldl)
Run Code Online (Sandbox Code Playgroud)
#include <dlfcn.h>
4:在main.cpp中添加
但这些方法都不起作用。
然后我尝试在没有 clion 的情况下编译它,并在文件夹中编写一个 MakeFile,如下所示:
DIR_INC = ./include
DIR_BIN = ./bin
DIR_LIB = ./libs
TARGET = demo
BIN_TARGET = $(DIR_BIN)/$(TARGET)
CROSS_COMPILE =
CFLAGS = -g -Wall -I$(DIR_INC)
#
ifdef LINUX64
LDFLAGS := -L$(DIR_LIB)/x64
else
LDFLAGS := -L$(DIR_LIB)/x86
endif
LDFLAGS += -lmsc -lrt -ldl -lpthread
OBJECTS := $(patsubst %.c,%.o,$(wildcard *.c))
$(BIN_TARGET) : $(OBJECTS)
$(CROSS_COMPILE)gcc $(CFLAGS) $^ -o $@ $(LDFLAGS)
%.o : %.c
$(CROSS_COMPILE)gcc -c $(CFLAGS) $< -o $@
clean:
@rm -f *.o $(BIN_TARGET)
.PHONY:clean
Run Code Online (Sandbox Code Playgroud)
这个Makefile有效,我认为是因为这句话:LDFLAGS += -lmsc -lrt -ldl -lpthread
,但是我如何在clion中更改我的My CMakefile.txt,我希望它在clion中工作。有人可以帮助我吗?多谢。
试试这个方法:
target_link_libraries(ify ${catkin_LIBRARIES} libmsc.so libasound.so libdl.so)
Run Code Online (Sandbox Code Playgroud)
或者(更好)这样:
target_link_libraries(ify ${catkin_LIBRARIES} libmsc.so libasound.so ${CMAKE_DL_LIBS})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5300 次 |
最近记录: |