
在cmake总加入
find_package(PkgConfig REQUIRED)
pkg_check_modules(ZMQ libzmq)
link_directories(${ZMQ_LIBRARY_DIRS})
include_directories(${ZMQ_INCLUDE_DIRS})
target_link_libraries(xxx ${ZMQ_LIBRARIES})
在工程搭建时,可能会有将静态库链接成动态库的需求,如出于代码保护的角度,某些模块会发布.a扩展名的静态库,我们要将多个这样的静态库链接成一个动态库。但与直接link目标文件不同的是,ld以默认参数执行时,并把静态库中没有用到的函数过滤掉,导致生成的so并未包含所要的函数,因此要加上--whole-archive参数,以保证所有的函数都包含在生成的so中。 在使用cmake时,CMakeLists.txt的写法如下: add_library( ${MODULE_NAME} SHARED ${CMAKE_SOURCE_DIR}/builttime.c #要生成一个so,至少要包含一个源文件,实在没有可以把库的编译时间戳打到这儿。 ) target_link_libraries( ${MODULE_NAME} ${${MODULE_NAME}_EXTRA_LDFLAGS} "-Wl,--whole-archive" #告诉编译器,从这里开始,所有的库的内容都包含到so中 ${LOCAL_MODULES} #可以是以源代码生成的静态库 ${PREBUILT_MODULES} #可以是预先生成的静态库 "-Wl,--no-whole-archive" #告诉编译器,从这里开始,以后的库的内容不用都包含到so中 )这一章将从软件开发者的角度来描述如何实用CMake。也就是说,如果你的目标是用CMake来管理你的生成过程,请阅读这一章。 CMake的输入 COMMAND(args) 这里的 COMMAND 是命令行的名称,args是用空格分割的参数列表。ACTUAL_3DPARTY_DIR,这个的意思是第三方文件所在目录,你把3rdParty下载下来,然后放在你电脑的任意盘位,比如C:/Programs/OSG/3rdParty。在cmake下ACTUAL_3DPARTY_DIR,把那个路径加上来就行了。我验证了下,是会有ACTUAL_3DPARTY_DIR这一项的,如果没有,是不是你没有下载3rdParty第三方文件啊。或者是你加入的CMakeLists.txt这一项应该是OpenSceneGraph-3.0.0中的CMakeLists.txt,而不是OpenSceneGraph-3.0.0\applications中的CMakeLists.txt,你再试试,如果还不行,再追问,希望最终能帮你解决问题。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)