使用Meson时如何指定库路径?

2023-11-22

我正在尝试使用 Meson 构建一个 C++ 项目。

问题是,我下面有一些库/opt/conda但不知道运行时如何链接项目meson build。 看来只能通过搜索了/usr/lib目录。

据我了解,meson uses cmake and pkg-config寻找图书馆。 然后会设置类似的东西CMAKE_PREFIX_PATH是一个可行的解决方案吗?如果是这样,我该怎么做?

提前致谢。


我看到两种可能的方法来解决你的问题。

  • 第一个解决方案使用LIBRARY_PATH,这不同于LD_LIBRARY_PATH正如稍后所解释的。
  • 第二种解决方案使用修改后的介子文件直接将选项传递给链接器。可选地,它还使用rpath这样就无需修改LD_LIBRARY_PATH之后。

    1. 第一个解决方案

构建项目时链接器使用LIBRARY_PATH(并不是LD_LIBRARY_PATH)

LIBRARY_PATHgcc 在编译之前使用它来搜索目录 包含静态和共享库需要链接到您的 程序。

LD_LIBRARY_PATH您的程序使用它来搜索目录 包含共享库编译成功后 并链接。

更多细节: LD_LIBRARY_PATH 与 LIBRARY_PATH

也许你可以尝试

export LIBRARY_PATH=/opt/conda/:$LIBRARY_PATH

在运行介子来构建您的项目之前。

  1. 第二种解决方案

修改你的介子文件并使用rpath(选修的)

前面第一个解决方案的替代方案是直接修改 Meson 文件以将一些选项传递给linker.

这是我过去使用过的东西,您可以轻松地适应您的问题:

#
# blaspp
#
blaspp_lib = 'blaspp'
blaspp_lib_dir = '/opt/slate/lib'
blaspp_header_dir = '/opt/slate/include'

blaspp_dep = declare_dependency(
    link_args : ['-L' + blaspp_lib_dir, '-l' + blaspp_lib],
    include_directories : include_directories(blaspp_header_dir))

executable('test_blaspp',
       'test_blaspp.cpp',
       build_rpath : blaspp_lib_dir,
       install_rpath : blaspp_lib_dir,
       dependencies : [blaspp_dep])
  • 声明_依赖关系(...)定义要传递给的选项linker(这取代了定义的需要LIBRARY_PATH在第一个解决方案中)

  • 可执行文件(...)定义rpath。这是一个可选步骤,它将额外的库路径信息直接嵌入到可执行文件中。如果您使用它,则无需修改LD_LIBRARY_PATH运行可执行文件时。

更多细节: https://amir.rachum.com/blog/2016/09/17/shared-libraries/(查看“rpath 和 runpath”部分)并查看维基百科:https://en.wikipedia.org/wiki/Rpath

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Meson时如何指定库路径? 的相关文章

  • libSDL、CMake 和 Mac OS X Lion

    我正在尝试在我的Mac上编译cmake项目 但它取决于SDL框架 我安装了这个框架 在 cmake 之后向我报告找不到 libSDL 我自己设置了以下导出变量 按照 cmake 的建议 export SDL INCLUDE DIR Libr
  • (如何)我可以抑制未找到包配置文件的警告吗?

    我正在尝试创建一个CMakeLists txt尝试查找的文件Qt5 如果失败 则尝试回退到Qt4安装 该脚本到目前为止有效 但如果出现以下情况我总会收到警告Qt5未安装 注意FindQt5 cmake是由提供Qt5并且仅当以下情况时才可用Q
  • target_link_libraries 和 INCLUDE_DIRECTORIES 属性

    在这个片段中 cmake minimum required VERSION 3 0 project hello LANGUAGES C VERSION 0 0 1 add library a INTERFACE target include
  • CMake Xcode生成器创建了一个无法构建的项目

    我有一个使用 CMake 构建系统的 C 项目 我使用 MacBook Pro 进行开发 因此当我使用终端时 一切都非常顺利 我可以构建我的项目 然而 今天我发现我可以在使用 CMake 生成器创建相应的项目后使用 Xcode gt cma
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 如何在 C++ 项目的 Cmake 文件上添加 Mac OS 框架

    我正在尝试将外部库 Vulkan 添加到我的项目中 这个库是预编译的并且有一个框架 我的项目树 build source Entry main cpp include ext vulkan macos include lib Framewo
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • Python pip install pyarrow错误,无法执行'cmake'

    我尝试在 EMR 集群的主实例上安装 pyarrow 但总是收到此错误 hadoop ip XXX XXX XXX XXX sudo usr bin pip 3 4 install pyarrow Collecting pyarrow Do
  • CMake:连续编译程序两次

    为了能够进行许多自动优化 我希望能够使用标志编译我的程序 fprofile generate首先 然后运行它生成配置文件 然后使用以下命令重新编译程序 fprofile use反而 这意味着我想连续编译我的程序两次 使用两个不同的CMAKE
  • 在生成器表达式中使用 cmake 选项

    我想在生成器表达式中使用 cmake 选项 为了打开某个编译标志 来自文档 https cmake org cmake help v3 10 manual cmake generator expressions 7 html我不清楚如何实现
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • Cmake 错误:无效的转义序列 \U

    使用 CMake 在 VC 10 中运行 OpenCL 代码时 出现以下错误 CMake Error at CMakeLists txt 6 set Syntax error in cmake code at C Users Shreedh
  • CMake“无法运行 MSBUILD.exe”命令错误

    当我想为 opencv 3 3 0 创建 Visual Studio 15 2017 make 文件时 它给了我以下错误消息 error in configuration process project files maybe invali
  • 将 Doctest 与代码一起使用时将实现放在哪里

    我在用着doctest https github com onqtam doctest用于我的 C 项目中的测试 我想将测试代码与我的实现放在一起 正如库所说是可能的 但我似乎不知道如何处理 doctest 实现代码 我有一个doctest
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • CMake:使用其他平台的生成器。如何?

    如何使用 CMake 在 Linux 上生成 Visual Studio 项目文件 你不能 您必须在 Windows 上运行 CMake 才能为 Visual Studio 生成
  • 如何在 CMake Makefile 中包含 OpenCV 库

    我希望你可以帮助我 我有一个简单的 CMakeLists txt 以便在 Leopard 10 5 8 上构建我的项目 我正在使用 CMake 2 8 1 目前这是代码 cmake minimum required VERSION 2 8
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • Cmake选项默认值

    如果我有一个 CMakeLists txt 文件 cmake minimum required VERSION 2 8 OPTION FOO Foo Option OFF MESSAGE FOO FOO 然后我调用 cmake 得到以下输出

随机推荐

  • 在 Spring 3 中组织类以进行组件扫描的明智方法是什么?

    我已经开始使用 Spring 3 开发一个新项目 并且正在使用注释 我喜欢我可以连接我的类来注入依赖项 但我知道这是一个不好的做法context component scan从基础包开始 我正在使用一个DispatcherServlet它有
  • mysql变量中的字段名

    是否可以选择名称为字符串的字段 SELECT fieldname FROM table 我需要这个触发器才能具有动态字段名称 就像是 SET fieldname NEW name UPDATE table SET fieldname 1 如
  • 免费如何知道要免费多少?

    在 C 编程中 您可以将任何类型的指针作为参数传递给 free 它如何知道要释放的已分配内存的大小 每当我将指针传递给某个函数时 我还必须传递大小 即 10 个元素的数组需要接收 10 作为参数才能知道数组的大小 但我不必将大小传递给免费功
  • AngularJS 对跨源资源执行 OPTIONS HTTP 请求

    我正在尝试设置 AngularJS 与跨域资源进行通信 其中提供模板文件的资产主机位于不同的域中 因此 Angular 执行的 XHR 请求必须是跨域的 我已为 HTTP 请求添加了适当的 CORS 标头到我的服务器 以使其工作 但它似乎不
  • 为什么 Serverless 在尝试打包或部署时会产生无效的跨设备链接错误?

    运行任一命令时 sudo serverless package or sudo serverless deploy 我得到以下回溯 错误 错误 异常 回溯 最近一次调用 文件 var lang lib python3 6 shutil py
  • WCF,发布 JSON 化数据

    我有一个复杂的类型 DataContract public class CustomClass DataMember public string Foo get set DataMember public int Bar get set 然
  • 计算用于定义二次贝塞尔曲线分段的参数

    我有一条二次贝塞尔曲线 描述为 startX startY 到 anchorX anchorY 并使用控制点 controlX controlY 我有两个问题 1 我想根据 x 点确定该曲线上的 y 点 2 然后 给定贝塞尔曲线上的线段 由
  • 如何在 Django 模板中声明变量

    如何在 Django 1 8 模板中声明变量 例如 my var My String 这样我就可以像这样访问它 h1 trans my var h1 Edit 为了证明我的目的 这是我的代码 my var String Text block
  • 使用 SetParameters.xml 通过 powershell 将网站发布到 Azure

    是否有机会使用 SetParameters xml 文件在 Web 部署包中设置参数 我想通过 powershell 脚本和 cmdlet 部署应用程序 选择 Azure订阅 发布 AzureWebsiteProject 但我还没有找到如何
  • 在 Python 版本 3.10 上使用 pip3 在 M1 Mac 上安装 numpy 时出现“不兼容的架构(具有 'arm64',需要 'x86_64')”错误

    我试图使用 pip3 在 M1 Macbook 上安装 numpy 版本 1 22 3 pip3 表示该包存在 但是当我尝试导入该模块时 会向我抛出一个错误 提示我 Importing the numpy C extensions fail
  • 如何中途开始测量?

    在我的赞美诗中 我需要从中间开始第一小节 它的拍值是 3 4 但我必须插入两个空的 不显示的八分音符 我怎么做 我用过o4 o4 c8 d 下面是第一个措施 但 lilypond 不喜欢这样 正确的方法是什么 这是该行 o4 o4 c8 d
  • 使用 opencv 构建自定义 svm 内核矩阵

    我必须训练支持向量机模型 并且我想使用自定义内核矩阵 而不是预设的矩阵 如 RBF Poly 等 我怎样才能用opencv的机器学习库做到这一点 如果可能的话 谢谢你 AFAICT OpenCV 不直接支持 SVM 的自定义内核 看起来 L
  • 返回所有小于 M 的素数

    给定一个整数 M 返回所有小于 M 的素数 给出一个尽可能好的算法 需要考虑时间和空间复杂度 埃拉托斯特尼筛法是一个很好的起点 http en wikipedia org wiki Sieve of Eratosthenes
  • Java 最终字段值的“最新”保证是否扩展到间接引用?

    Java 语言规范定义了 Final 字段的语义第17 5节 Final 字段的使用模型很简单 在对象的构造函数中设置该对象的最终字段 在对象的构造函数完成之前 请勿将对正在构造的对象的引用写入其他线程可以看到的位置 如果遵循这一点 那么当
  • Laravel 如何制作自定义验证器?

    我需要制作自己的扩展验证器Illuminate Validation Validator 我读过这里的答案中给出的示例 Laravel 4 中的自定义验证 但问题是它没有清楚地展示如何使用自定义验证器 它不会显式调用自定义验证器 您能给我一
  • 如何通过DDP(WebSocket)协议访问meteor.com上托管的应用程序?

    我有一个Meteor app A和另一个应用程序B 不使用 Meteor 而是与应用程序进行一些数据交换A 当我启动时它工作正常A在我的本地网络中的一台计算机上 但是当我将其部署在meteor com 托管上时 它却没有 服务器没有回复 B
  • 如何调用 CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer?

    我正在想办法如何称呼这个AVFoundationSwift 中的函数 我花了很多时间摆弄声明和语法 才走到这一步 编译器大部分都很高兴 但我还有最后一个难题 public func captureOutput captureOutput A
  • 我可以通过placement-new覆盖const对象吗?

    基本生活 8告诉我们 我们可以在一个对象的生命周期结束后 使用它占用的存储空间来创建一个新的对象 并使用它的原始名称来引用它 除非 原始对象的类型不是 const 限定的 并且 如果是类类型 则不包含任何类型为 const 限定的非静态数据
  • 如何将文件写入相机所在的DCIM目录中?

    假设我正在编写一个替代的相机应用程序 并希望将图像写入与相机完全相同的位置 并以与相机完全相同的名称命名它们 我将如何实现这个目标 如何知道相机文件的位置 如何知道当前的命名约定 如何获得该目录的权限 任何答案将不胜感激 好吧 假设它不是真
  • 使用Meson时如何指定库路径?

    我正在尝试使用 Meson 构建一个 C 项目 问题是 我下面有一些库 opt conda但不知道运行时如何链接项目meson build 看来只能通过搜索了 usr lib目录 据我了解 meson uses cmake and pkg