本文章仅仅是个人学习过程记录,内容的准确性无法保证,仅做参考。
一、安装Clion
实验目的,简单为主,本次直接官网下个30天试用期版本安装即可。
二、安装vmware16
请参考:vmware16+ubuntu14.04安装配置tuxedo11并运行sample-CSDN博客
三、安装ubuntu14.0
请参考:vmware16+ubuntu14.04安装配置tuxedo11并运行sample-CSDN博客
四、远程编译环境配置
1.Clion配置远程链接:本地clion开发/优雅地调试,并实时同步远程服务器_clion远程开发-CSDN博客
写的非常详细,关于这篇文章中写的gdb调试的内容,如果暂时不用,可以先不管。我的目标是使用远程编译,能够实现目标即可。
2.本地工作目录和远程工作目录映射配置
学习过程不熟悉,由易到难,一步步摸索,因此没有直接远程tuxedo的目录下编译。而是把本地目录与远程目录做如下映射:
3.坑:由于一开始使用的模式net模式,虚拟机中ubuntu的IP不是静态IP,隔两个小时会变化,用Clion链接ubuntu隔两个小时就会断开链接,需要重新设置IP,非常不方便。因此我对ubuntu设置了静态IP,设置方法参考:vmware虚拟机ubuntu系统配置静态ip_windows下如何设置虚拟机ubuntu的静态ip地址 vmware-CSDN博客
如果设置静态IP过程中碰到重启网络有报错,可以参考:
ubuntu提示错误stop: Job failed while stopping-CSDN博客
五、以上环境搭建搞定后,编译simpcl.c
1.新建simpc文件夹,并在下面新建simpcl.c文件,把tuxedo提供的样例程序拷贝过来
2.新建simpcl目录下CMakeLists.txt文件,内容如下:
cmake_minimum_required(VERSION 2.8.12.2)
project(cliontest C)
set(CMAKE_C_STANDARD 11)
#添加链接选项,解决dlopen dlclose等链接报错问题
set(LINK_FLAGS "-Xlinker --no-as-needed")
set(CMAKE_SHARED_LINKER_FLAGS "${LINK_FLAGS}")
#设置头文件路径
set(INC_DIR ../include)
#设置链接库路径
set(LINK_DIR ../lib)
#引入头文件
include_directories(${INC_DIR})
#引入库文件
link_directories(${LINK_DIR})
#编译文件
add_executable(simpcl simpcl.c)
#将第三方库连接在一起
target_link_libraries(simpcl ${CMAKE_SHARED_LINKER_FLAGS} tux buft dl fml fml32 engine pthread )
3.顶层CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 2.8.12.2)
project(cliontest C)
set(CMAKE_C_STANDARD 11)
#添加链接选项,解决dlopen dlclose等链接报错问题
#set(LINK_FLAGS "-Xlinker --no-as-needed")
#set(CMAKE_SHARED_LINKER_FLAGS "${LINK_FLAGS}")
add_subdirectory("${PROJECT_SOURCE_DIR}/simpcl" "${PROJECT_SOURCE_DIR}/simpcl/output") #生成的目标文件会放到output目录
#设置头文件路径
#set(INC_DIR ./include)
#设置链接库路径
#set(LINK_DIR ./lib)
#引入头文件
#include_directories(${INC_DIR})
#引入库文件
#link_directories(${LINK_DIR})
#编译文件
#add_executable(cliontest main.c)
#将第三方库连接在一起
#target_link_libraries(cliontest ${CMAKE_SHARED_LINKER_FLAGS} tux buft fml dl fml32 engine pthread )
上面顶层CMakeLists.txt文件中注释掉的内容,是因为一开始,我为了省事儿,没有新建simpcl子目录,直接把新建工程中main.c的内容改成了simpcl.c中的样例程序,后来为了编译多个目标程序,这里给注释掉了,只是用来生成顶层makefile
另外,多目标编译的时候,Clion有个配置要修改为所有目标。如下图:
4.点击build,Clion提示信息如下:
ssh到ubuntu上,可以看到生成的simpcl
问题:1.链接库时报错
xxx@ubuntu:~/tuxedo12.1.1.0/simpapp$ gcc -I$TUXDIR/include -o simpcl -L${TUXDIR}/lib simpcl.c -ltux -lbuft -lfml -lfml32 -lengine -ldl -lpthread
/home/sqj/tuxedo12.1.1.0/lib/libengine.so: undefined reference to `dlopen'
/home/sqj/tuxedo12.1.1.0/lib/libengine.so: undefined reference to `dlclose'
/home/sqj/tuxedo12.1.1.0/lib/libengine.so: undefined reference to `dlerror'
/home/sqj/tuxedo12.1.1.0/lib/libengine.so: undefined reference to `dlsym'
解决方法是在CMakeLists.txt中添加如下内容
#添加链接选项,解决dlopen dlclose等链接报错问题 set(LINK_FLAGS "-Xlinker --no-as-needed") set(CMAKE_SHARED_LINKER_FLAGS "${LINK_FLAGS}")