如何使用 CMake 链接 .so 文件 [重复]

2024-01-27

我想基于 .cpp、.h 和多个 .so 文件重建一个简单的应用程序。据我所见,我的 CMakeLists.txt 应该是这样的:

cmake_minimum_required(VERSION 3.5)    
set(CMAKE_CXX_STANDARD 11)      
project(test C CXX)

add_executable(${PROJECT_NAME} main.cpp)

target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/lib)     
target_link_libraries(test ${CMAKE_SOURCE_DIR}/libA.so ${CMAKE_SOURCE_DIR}/libB.so) 

所有文件都在同一个文件夹中。我之前将 .cpp 与 .h 文件正确链接。cmake .没有给我错误,但是使用后make i get :

main.cpp:(.text+0xf2d) : undefined reference to « pthread_create »

这是一个不属于我的 .h 文件的函数,因此它应该位于 .so 文件中。我不知道问题是来自链接还是文件 .so 本身。

我还有同名的文件,例如 libA.so、libA.so.0 或 libA.so.0.2,我是否应该将所有这些文件包含在我的可执行文件中?


错误消息意味着您必须添加pthread到链接库列表。在target_link_libraries您只列出没有路径的库名称,lib前缀和文件扩展名:

cmake_minimum_required(VERSION 3.5)    
set(CMAKE_CXX_STANDARD 11)      
project(test C CXX)

find_package(Threads REQUIRED)

add_executable(${PROJECT_NAME} main.cpp)

target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/lib)     
target_link_libraries(test A B Threads::Threads)

您可以添加路径target_link_directories https://cmake.org/cmake/help/latest/command/target_link_directories.html:

cmake_minimum_required(VERSION 3.5)    
set(CMAKE_CXX_STANDARD 11)      
project(test C CXX)

find_package(ThreadsREQUIRED)

add_executable(${PROJECT_NAME} main.cpp)

target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/lib)     
target_link_directories(test PRIVATE ${CMAKE_SOURCE_DIR})
target_link_libraries(test PRIVATE A B Threads::Threads)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 CMake 链接 .so 文件 [重复] 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 如何在 Azure DevOps yaml 管道中的每个循环中使用变量

    我的 Azure DevOps 管道中有一个 PowerShell 脚本 task PowerShell 2 displayName Get records inputs targetType inline script lt gt rec
  • OpenID 的最佳 Coldfusion 库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 用于多图像上传的 Django Rest 框架

    我在使用 Django Rest Framework 上传多个图像时遇到了困难 我想要的是 有一个租赁表 用户可以在其中一次填写有关租赁信息以及多个图像 图像可以是厨房 客厅 浴室等 为了这笔租金 他们想登记 一份租金可以有多个图像 因此我
  • 使用 PHP 读取 JSON 数据 [重复]

    这个问题在这里已经有答案了 Solr 以以下 JSON 格式返回响应 responseHeader status 0 QTime 2 params indent on start 0 q wt json version 2 2 rows 1
  • 格式化 Netbeans 的大括号 [重复]

    这个问题在这里已经有答案了 我一直在查看 Netbeans 的选项 但找不到更改大括号默认位置的方法 public class foo to this public class foo Look in Tools gt Options gt
  • 5 规则(针对构造函数和析构函数)是否已经过时?

    5 规则指出 如果一个类具有用户声明的析构函数 复制构造函数 复制赋值构造函数 移动构造函数或移动赋值构造函数 则它必须具有其他 4 个 但今天我突然意识到 什么时候需要用户定义的析构函数 复制构造函数 复制赋值构造函数 移动构造函数或移动
  • Java Quartz 内存泄漏消息

    我的网络应用程序中有一个quartz 工作 它是由servlet 启动的 当我重新部署我的应用程序时 我收到以下消息 DefaultQuartzScheduler Worker 5 but has failed to stop it Thi
  • 如何向字符串添加双引号字符?

    如何向给定字符串添加双引号字符 local str foo 我怎样才能得到字符串 foo 其中字符串包含前导和尾随引号 您可以将引号粘贴到字符串上 local str foo print foo gt foo print foo gt fo
  • 角度 6 元素布尔输入参数

    我正在构建一个角元素并向其传递一些输入参数 我可以很好地传递一些字符串输入参数 ikrId 和环境工作完美 但很难通过角元素 将 showTitle 属性从父角度组件传递给组件效果很好 这是组件片段 export class MyCompo
  • 网络线程阻塞 GUI

    我正在研究 C 和 WPF 我正在开发一个应处理 LAN 上的数据传输的应用程序 特别是 每次传输都会显示进度条 如果是下载 则为绿色 如果是上传 则为红色 最初 我做了一些虚构的尝试 其中我模拟了传输 网络线程被停用 因此 以编程方式填充
  • 使用实体框架加入视图时使用 .Include() [重复]

    这个问题在这里已经有答案了 我使用索引视图 它是一个没有任何关系的实体 与我的表实体的关系会更好 但这似乎几乎不可能实现 该视图由 4 个 FK 组成 它们共同构成 PK PortalID CategoryID BranchID Compa
  • Rails 仅在有条件时才验证唯一性

    我有一个问题课 class Question lt ActiveRecord Base attr accessible user id created on validates uniqueness of created on scope
  • 创建自定义文本绘制视图

    我正在为 iPhone 创建一个语法荧光笔 为了显示多种格式的文本 我对 UIView 进行了子类化并修改了drawRect 方法 以便使用正确的语法突出显示显示每一行 突出显示是用 RegEx 提前完成的 文本是用CGContextSho
  • 获取网络浏览器控件的屏幕截图?

    关于这个问题有很多线索 但没有一个是明确的 而且我尝试过的任何一个实际上都没有工作正常 获取整个 Web 浏览器控件的内容 甚至是屏幕外的内容 的代码是什么 看起来他们确实有 webBrowser1 DrawToBitmap but its
  • 跨平台 SSO - 从哪里开始?

    我正在研究两个不同系统之间的单点登录选项 一个 NET 一个 Java EE 它们各自独立管理并具有单独的用户管理 并且存在一些重叠的用户 我希望能够从一个链接到另一个 而无需重新提示输入密码 SSO 产品和协议似乎有很多选择 我相当有信心
  • 如何过滤对象中的数组

    我的对象中有这些数组 我需要filter tags具有特定值的数组 我不知道如何实现这一目标 const obj slug add an aggregate rating feature to your website frontmatte
  • 无法使用 Debian squeeze 在 Sheevaplug (armv5t) 上构建节点

    我现在已经尝试了几种在运行 Debian 版本 6 0 2 squeeze 的 Sheevaplug armv5t 上构建节点 版本 0 5 1 的方法 但最终总是 node Illegal instruction 在所有情况下我都可以编译
  • 处理 ThreadPoolExecutor 的异常

    我有以下代码片段 基本上扫描需要执行的任务列表 然后将每个任务交给执行器执行 The JobExecutor依次创建另一个执行器 用于执行数据库操作 读取数据并将数据写入队列 并完成任务 JobExecutor返回一个Future
  • data.table 在函数中修改后首次调用时不显示[重复]

    这个问题在这里已经有答案了 在我的函数中 我修改作为参数给出的 data table 的列 我注意到 如果我在调用该函数后尝试显示此 data table 我的意思是 仅按其名称 则不会发生任何事情 并且只有后续调用才会显示该表 DT lt
  • 如何使用 CMake 链接 .so 文件 [重复]

    这个问题在这里已经有答案了 我想基于 cpp h 和多个 so 文件重建一个简单的应用程序 据我所见 我的 CMakeLists txt 应该是这样的 cmake minimum required VERSION 3 5 set CMAKE