关于cmake输出动态链接库名字的问题
使用cmake进行项目编译管理时,我们经常使用
add_library(foo SHARED foo.cpp)
这样的话,输出时,如果在win下面会得到foo.dll,linux下面会得到libfoo.so,mac 下得到libfoo.dylib
如果我们编写的是用于lua扩展的C模块,那么在进行require的时候,比如这样:
require 'libfoo' --默认加载libfoo.[so|dll],并且执行luaopen_libluafoo
require 'foo' --加载foo.so,并且执行luaopen_luafoo
并且各个平台下各不相同,这真是太苦恼的,cmake就是方便
##这样就不会有lib前缀了
set_target_properties(foo PREFIX "") ##由于在mac下如果加载的是dylib也是件麻烦的事,不然把后缀也改了吧反正不考虑windows
set_target_properties(foo SUFFIX "so")
对了,吐槽一下mac的rpath也是件麻烦的事情
好贴留名一下https://gist.github.com/robertmaynard/5750737
# enable @rpath in the install name for any shared library being built
set(CMAKE_MACOSX_RPATH ) # the install RPATH for bar to find foo in the install tree.
# if the install RPATH is not provided, the install bar will have none
set_target_properties(bar PROPERTIES INSTALL_RPATH "@loader_path/../lib")
关于cmake输出动态链接库名字的问题的更多相关文章
- 通过android studio的gradle强制cmake输出命令详情
https://stackoverflow.com/questions/43439549/force-cmake-in-verbose-mode-via-gradle-and-the-android- ...
- C++内联汇编,输出人物名字
DWORD PeopleBase =0x9CD674;//天龙人物基址 //获取人物名称 char * CData::GetPeopleName() { char * name="& ...
- 【linux基础】CMake如何生成动态链接库文件
CMakeLists.txt SET(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib) ADD_LIBRARY(filename SHARED ${CURREN ...
- cmake find_package 命令
1. find_package(<Name>)命令首先会在模块路径中寻找 Find<name>.cmake,这是查找库的一个典型方式. 具体查找路径依次为CMake: 变量$ ...
- find_package()的查找*.cmake的顺序
1. find_package(<Name>)命令首先会在模块路径中寻找 Find<name>.cmake,这是查找库的一个典型方式.具体查找路径依次为CMake: 变量${C ...
- Linux的.a、.so和.o文件 windows下obj,lib,dll,exe的关系 动态库内存管理 动态链接库搜索顺序 符号解析和绑定 strlen函数的汇编实现分析
Linux的.a..so和.o文件 - chlele0105的专栏 - CSDN博客 https://blog.csdn.net/chlele0105/article/details/23691147 ...
- CMake技术总结
在做算法部署的过程中,我们一般都是用C++开发,主要原因是C++的高效性,而构建维护一个大型C++工程的过程中,如何管理不同子模块之间的依赖.外部依赖库.头文件和源文件如何隔离.编译的时候又该如何相互 ...
- 老版mapreduce跑streaming作业多路输出的方法
1. 继承MultipleTextOutputFormat实现自己的输出类. 2. 重写generateFileNameForKeyValue方法,返回输出的名字,可通过"/"分割 ...
- linux动态链接库---一篇讲尽
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: tmux: error while loading shared libraries: libevent-1.4.s ...
随机推荐
- tar压缩命令
01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...
- SVG介绍
SVG介绍 SVG是指可缩放矢量图(Scalable Vector Graphics).SVG使用XML格式来定义图形.SVG可以直接嵌入到HTML页面中. 位图和矢量图 位图(Bitmap)是由很多 ...
- 面试题目: 获取服务器IP和客户端IP
[面试题目] 怎么获取服务器IP和客户端IP地址? I. PHP获取客户端IP, 可通过下面系统变量 1. $_SERVER['Remote_Addr'] 2. $_SERVER['HTTP_CLIE ...
- java POST 传值 加签 验证
话不多说,代码如下 package com.syl.test_key; import lombok.extern.slf4j.Slf4j; import org.apache.commons.code ...
- VirtualBox-4.3.0启动报错及解决办法
今天装了VirtualBox-4.3.0-89960-Win.exe,安装过程后启动时报错: 虚拟电脑控制台-严重错误(标题) 创建 COM 对象失败. 应用程序将被中断. 被召者 RC: E_NOI ...
- first post
post
- Access入门 2010,数学
Access入门 2010(高级窗体) 1,创建数据透视图:创建---其他窗体---数据透视图---图标字段列表---选择列表内容---移动到数据透视图的对应位置---完成. 2,创建数据透视表窗体: ...
- 用户登录时,获取用户ip地址
使用django来获取用户访问的IP地址,如果用户是正常情况下通过request.META['REMOTE_ADDR'] 可以获得用户的IP地址.但是有些网站服务器会使用ngix等代理http,或者 ...
- jQuery中的pushStack
在学习jquery源码的时候,学到了其中的pushStack方法,在这里记录一下 源码为 // Take an array of elements and push it onto the stack ...
- 第8章 CSS3中的变形与动画(上)
变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点中心顺时 ...