Linux: dev: cmake: CHECK_LIBRARY_EXISTS

文章目录

  • 简介
  • 例子
  • 源代码
  • 最终调用到的两个命令
  • 如果结果是
  • 这里为什么不直接使用rpm查看包呢?
  • 需要注意的问题

简介

https://cmake.org/cmake/help/latest/module/CheckLibraryExists.html
这个方法是在Modules/CheckLibraryExists.cmake文件里定义的一个宏。
最终使用的方法是通过现场编译一个文件,里面调用所需要的函数,链接时,使用-labc链接库,然后确定这个库有没有在编译环境安装。其实是分成两步,一个是找相应的.a/.so文件,一个是寻找相应的函数定义。

例子

比如下面这个例子,就是要看“pcre2_match_8” 函数有没有定义,根据输出结果来判断,有没有:

CHECK_LIBRARY_EXISTS(pcre2-8 pcre2_match_8 “” HAVE_PCRE2)
如果没有指定目录,可能会在目录:/usr/lib/gcc/x86_64-redhat-linux/8/…/…/…/…/lib64/libpcre2-8.so

    if(${VARIABLE})if(NOT CMAKE_REQUIRED_QUIET)message(CHECK_PASS "found")endif()set(${VARIABLE} 1 CACHE INTERNAL "Have library ${LIBRARY}")else()if(NOT CMAKE_REQUIRED_QUIET)message(CHECK_FAIL "not found")endif()set(${VARIABLE} "" CACHE INTERNAL "Have library ${LIBRARY}")endif()

源代码

对应的源文件是 CheckFunctionExists.c

#ifdef CHECK_FUNCTION_EXISTS#  ifdef __cplusplus
extern "C"
#  endifcharCHECK_FUNCTION_EXISTS(void);
#  ifdef __CLASSIC_C__
int main()
{int ac;char* av[];
#  else
int main(int ac, char* av[])
{
#  endifCHECK_FUNCTION_EXISTS();if (ac > 1000) {return *av[0];}return 0;
}#else /* CHECK_FUNCTION_EXISTS */
#  error "CHECK_FUNCTION_EXISTS has to specify the function"
#endif /* CHECK_FUNCTION_EXISTS */

最终调用到的两个命令

/usr/bin/cc -pie -fPIC -fstack-protector --param=ssp-buffer-size=4 -DCHECK_FUNCTION_EXISTS=pcre2_match_8 -o CMakeFiles/cmTC_554e1.dir/CheckFunctionExists.c.o -c /usr/share/cmake/Modules/CheckFunctionExists.c
/usr/bin/cc -pie -fPIC -fstack-protector --param=ssp-buffer-size=4 -DCHECK_FUNCTION_EXISTS=pcre2_match_8 -export-dynamic CheckFunctionExists.c.o -o cmTC_554e1 -lpcre2-8

如果结果是

/usr/bin/ld: cannot find -lpcre2-8 “根据 这里的 not find”来判断是否有相关的library。
collect2: error: ld returned 1 exit status

这里为什么不直接使用rpm查看包呢?

因为rpm是专门RHEL提供的命令,其他平台不适应。

需要注意的问题

这里需要注意,不能直接使用nm,不加任何参数来查看so文件里是否有这个这个符号而应该加上一个参数:–dynamic。
nm --demangle --dynamic --extern-only <lib.so>
这个可以显示动态库里的动态符号
[root@qrms6-host01 lib64]# nm -D --defined-only libpcre2-8.so.0.7.1 | grep match
00000000000196c0 T pcre2_dfa_match_8
0000000000043e80 T pcre2_jit_match_8
0000000000044d60 T pcre2_match_8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-15 计算圆周率 (15 分)

根据下面关系式&#xff0c;求圆周率的值&#xff0c;直到最后一项的值小于给定阈值。 输入格式&#xff1a; 输入在一行中给出小于1的阈值。 输出格式&#xff1a; 在一行中输出满足阈值条件的近似圆周率&#xff0c;输出到小数点后6位。 输入样例&#xff1a; 0.01结尾无…

Struts2的全局结果视图的配置

1.在struts.xml中的package标签内添加<global-results/>标签&#xff0c;将全局结果加进该标签内&#xff0c;只适用于当前包下。 <package name"customer" namespace"/customer" extends"struts-default" > <global-results>…

长大了Java! 提出Java桌面版

不&#xff0c;这不是另一个“ Java已死”的咆哮。 Java非常活跃。 它是可用的最佳开发和运行时平台之一。 迄今为止&#xff0c;最稳定的平台。 那可能只是它最大的祸根。 荒谬&#xff01; 稳定性如何&#xff1f; 你可能会问。 好吧&#xff0c;由于它&#xff0c;您可以看到…

[算法练习]Excel Sheet Column Title

题目&#xff1a; Given a positive integer, return its corresponding column title as appear in an Excel sheet. For example: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB 代码&#xff1a; class Solution { public: string convertToTitle(…

7-16 求符合给定条件的整数集 (15 分)

给定不超过6的正整数A&#xff0c;考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。 输入格式&#xff1a; 输入在一行中给出A。 输出格式&#xff1a; 输出满足条件的的3位数&#xff0c;要求从小到大&#xff0c;每行6个整数。整数间以空格分隔&#…

JUnit学习之hamcrest、testSuite介绍及测试原则

[转自] http://huihai.iteye.com/blog/1994270 上一节说了junit的一些基本概念&#xff0c;主要使用assert做一些基本的判断。但很多时候使用assert做判断&#xff0c;并不方便&#xff0c;如果要判断某几个值是否为true或false&#xff0c;这时使用hamcrest来判断就会方便许多…

Java最佳实践– Vector vs ArrayList vs HashSet

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将在三个最常用的Collection实现类之间进行性能比较。 为了使事情变得更现实&#xff0c;我们将在多线程环境下进行测试&#xff0c;以讨论和演示如何将Vector &#xff0c; ArrayLi…

iOS:图片上传时两种图片压缩方式的比较

上传图片不全面的想法&#xff1a;把图片保存到本地,然后把图片的路径上传到服务器&#xff0c;最后又由服务器把路径返回&#xff0c;这种方式不具有扩展性&#xff0c;如果用户换了手机&#xff0c;那么新手机的沙盒中就没有服务器返回的图片路径了&#xff0c;此时就无法获取…

7-17 爬动的蠕虫 (15 分)

一条蠕虫长1寸&#xff0c;在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸&#xff0c;但必须休息1分钟才能接着往上爬。在休息的过程中&#xff0c;蠕虫又下滑了D寸。就这样&#xff0c;上爬和下滑重复进行。请问&#xff0c;蠕虫需要多长时间才能爬出井&#xff1f;…

浅谈泛型之泛型方法

实际不用多说只举2个例子就行: //例1 static void fromArrayToCollection(Object[] a, Collection<?> c) {for (Object o : a) { c.add(o); // 编译错误,错误原因也很简单,<?>是无上下界的通配符泛型,所以编译器根本无法确认类型} } //例2 static <T> void…

Android特效 五种Toast详解

Toast是Android中用来显示显示信息的一种机制&#xff0c;和Dialog不一样的是&#xff0c;Toast是没有焦点的&#xff0c;而且Toast显示的时间有限&#xff0c;过一定的时间就会自动消失。而且Toast主要用于向用户显示提示消息&#xff0c;接下来巴士为大家总结了Android五种To…

Java最佳实践–高性能序列化

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论并演示如何将对象序列化用于高性能应用程序。 所有讨论的主题均基于用例&#xff0c;这些用例来自于电信行业的关键任务超高性能生产系统的开发。 在阅读本文的每个部分之前…

7-18 二分法求多项式单根 (20 分)

二分法求函数根的原理为&#xff1a;如果连续函数f(x)在区间[a,b]的两个端点取值异号&#xff0c;即f(a)f(b)<0&#xff0c;则它在这个区间内至少存在1个根r&#xff0c;即f0。 二分法的步骤为&#xff1a; 检查区间长度&#xff0c;如果小于给定阈值&#xff0c;则停止&a…

java只使用try和finally不使用catch的原因和场景

JDK并发工具包中&#xff0c;很多异常处理都使用了如下的结构&#xff0c;如AbstractExecutorService&#xff0c;即只有try和finally没有catch。 class X {private final ReentrantLock lock new ReentrantLock();// ...public void m(){lock.lock(); // block until condi…

Java 7:尝试资源

本文研究try-with-resources语句的用法。 这是一个声明一个或多个资源的try语句。 资源是一个对象&#xff0c;程序完成后必须将其关闭。 try-with-resources语句可确保在语句末尾关闭每个资源。 任何实现java.lang.AutoCloseable或java.io.Closeable接口的对象都可以用作资源。…

Spring学习(19)--- Schema-based AOP(基于配置的AOP实现) --- 配置切面aspect

Spring所有的切面和通知器都必须放在一个<aop:config>内&#xff08;可以配置包含多个<aop:config>元素&#xff09;&#xff0c;每个<aop:config>包含pointcut&#xff0c;advisor和apsect元素。ps&#xff1a;他们必须按照这个顺序进行声明 <aop:pointc…

2021-10-08

word文档&#xff1a;.doc .docx 需求文档、架构文档、接口文档、详设文档一般都是用word编写。 Excel表格&#xff1a;.xls、.xlsx’&#xff0c;.csv 测试用例 PPT幻灯片&#xff1a;.ppt、*.pptx 版本不同 可执行文件&#xff08;windows系统&#xff09;&#xff1a; *.exe…

UITableViewCell 选中的状态小技巧

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {[super setSelected:selected animated:animated]; //cell 没被选中时 隐藏这个 _leftImageViewself.leftImageView.hidden !selected; //选中text变红 不然变灰色self.textLabel.textColor selected ? [UICol…

Spring和AspectJ的领域驱动设计

在JavaCodeGeeks主持的上一篇文章中&#xff0c;我们的JCG合作伙伴 Tomasz Nurkiewicz介绍了使用State设计模式进行领域驱动设计的介绍 。 在该教程的最后&#xff0c;他承认他省略了如何将依赖项&#xff08;DAO&#xff0c;业务服务等&#xff09;注入域对象的过程。 但是&am…

BZOJ 3143 HNOI2013 游走 高斯消元 期望

这道题是我第一次使用高斯消元解决期望类的问题&#xff0c;首发A了&#xff0c;感觉爽爽的.... 不过笔者在做完后发现了一些问题&#xff0c;在原文的后面进行了说明。 中文题目&#xff0c;就不翻大意了&#xff0c;直接给原题&#xff1a; 一个无向连通图&#xff0c;顶点从…