Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PythonandC++:如何在包括GSL库在内的Cmakelist中使用pybind11

PythonandC++:如何在包括GSL库在内的Cmakelist中使用pybind11
EN

Stack Overflow用户
提问于 2018-04-23 01:57:58
回答 1查看 8.2K关注 0票数 6

我希望能够将我的C++代码作为python包调用。要做到这一点,我使用pybind11和CMakelists (按照下面的示例示例)。我的问题是,我必须在代码的编译中包含GSL库,这些库需要一个显式的链接器-lgsl

如果我只是编译并运行C++,而不使用python包装它,那么下面的Cmakelists.txt文件就可以完成这个工作

代码语言:javascript
运行
AI代码解释
复制
cmake_minimum_required(VERSION 3.0)

set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")

project(myProject)


add_executable(
    myexecutable
    main.cpp
    function1.cpp
)

find_package(GSL REQUIRED)
target_link_libraries(myexecutable GSL::gsl GSL::gslcblas)

但是当使用pybind11时,我发现的模板不允许add_executable,因此target_link_libraries不能工作。

我已经试过了

代码语言:javascript
运行
AI代码解释
复制
project(myProject)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES)   # See below (1)



# Set source directory
set(SOURCE_DIR "project")

# Tell CMake that headers are also in SOURCE_DIR
include_directories(${SOURCE_DIR})
set(SOURCES "${SOURCE_DIR}/functions.cpp")


# Generate Python module
add_subdirectory(lib/pybind11)
pybind11_add_module(namr ${SOURCES} "${SOURCE_DIR}/bindings.cpp")


FIND_PACKAGE(GSL REQUIRED)
target_link_libraries(GSL::gsl GSL::gslcblas)

但这会在建筑中产生错误。

知道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-23 02:06:24

函数pybind11_add_module创建了一个库目标,它可以与其他库一起用于添加链接模块:

代码语言:javascript
运行
AI代码解释
复制
pybind11_add_module(namr ${SOURCES} "${SOURCE_DIR}/bindings.cpp")
target_link_libraries(namr PUBLIC GSL::gsl GSL::gslcblas)

这一点在文档中有明确的表述

这个函数的行为非常类似于CMake的内置add_library (实际上,它是一个围绕该命令的包装函数)。它将添加一个名为<name>的库目标,它将从列出的源文件中构建。此外,它还将处理所有特定于Python的编译器和链接器标志,以及操作系统和Python版本特定的文件扩展名。生成的目标<name>可以使用常规的CMake命令进一步操作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49978208

复制
相关文章
GSL+DevC++使用
在DEV C++中配置GSL1.8库 前面写了如何在vs2005中添加gsl,本文所所述为在dev c++中使用gsl库,由实践总结而得。 准备软件: 1、Orwell Dev C++ 5.6.2 No Compiler Setup.exe(devc++的社区升级版,很不错的) 2、gsl-1.8.exe 3、TDM-GCC4.7.1-2.exe,安装后,目录同样名为mingw32(也可以安装mingw版) 步骤如下: 1、安装完以上3个软件。 2、将 gsl 安装目录下的 bin 下 libgsl.dll,libgslcblas.dll 复制到mingw32的bin目录中,lib 下 ibgsl.a,libgslcblas.a 复制到 mingw32目录下的 lib 目录下;include 下的整个 gsl 文件夹复制到mingw32目录下的 include 目录下。 3、 打开 dev-c++,工具-编译选项-编译器,选上“在连接器命令行加入如下命令”,加入-lgsl -lgslcblas(中间有空格,即在连接时连上 libgsl.a,libgslcblas.a,gcc 可以自动识别前缀 lib 和后缀.a) 此时在用Dev C++打开一个gsl的c文件,如下所示:
用户4645519
2020/09/07
1.1K0
Tunnel:论如何在内网中自由渗透
*本文作者:戒贤,本文属FreeBuf原创奖励计划,未经许可禁止转载 背景 能够成功地通过web漏洞获取到webshell,对于一次完整的渗透测试来说,仅仅相当于万里长征的第一步。这么说,可能比较夸张吧,并不是所有渗透测试都会遇到几百台机器的大内网。 在PTES(渗透测试执行标准)中,把渗透测试分成了七个主要的过程,也就是说现在通常说的前期交互、目标识别、信息收集、漏洞分析、漏洞利用、后渗透测试、报告编制这七大步骤。 如果你看过PTES标准,你应该会跟我有一样的感觉,后渗透测试部分的内容,几乎等于其他六个部
FB客服
2018/02/08
2.1K0
Tunnel:论如何在内网中自由渗透
Cobalt strike在内网渗透中的使用
上一篇文章中,介绍了Cobalt strike 发送钓鱼邮件的利用,但是Cobalt strike不仅仅是用在钓鱼邮件,同时也是一款非常强大的内网渗透利器,下面我们就来介绍一下如何利用其在内网中配合一
FB客服
2018/02/09
2.3K0
Cobalt strike在内网渗透中的使用
如何使用Python连接到驻留在内存中的SQLite数据库?
SQLite 是一种流行的、轻量级的、独立的数据库引擎,广泛用于各种应用程序。SQLite的独特功能之一是它能够在内存中创建数据库,这允许更快的数据访问和操作。在本文中,我们将探讨如何使用 Python 连接到内存中的 SQLite 数据库,提供分步说明、代码示例、解释和示例输出。
很酷的站长
2023/08/11
7020
如何使用Python连接到驻留在内存中的SQLite数据库?
fortran的cmakelist的写法
cmake_minimum_required(VERSION 3.19) project(study Fortran) add_compile_options(-O3 -ffree-line-length-none -fdefault-integer-8 -finteger-4-integer-8 -freal-4-real-8 -fallow-argument-mismatch -std=legacy -fdec-format-defaults ) enable_language(Fortran) add
gzq大数据
2021/11/30
8860
fortran的cmakelist的写法
C++核心准则​GSL:指南支持库
The GSL is a small library of facilities designed to support this set of guidelines. Without these facilities, the guidelines would have to be far more restrictive on language details.
面向对象思考
2020/11/17
1.1K0
数据在内存中的储存
前言:现实世界是一个充斥着数据的世界,万事万物身上都充满着数据的存在,比如我们人身上就有身高,体重,年龄等数据。 我们所学的C语言就是用来处理现实中的中的问题,自然而然C语言中必有存储这些数据的盒子,每种数据都有与之对应的盒子,这样方便管理与存储,接下来我们就来深究数据在内存中的存储。
用户10517932
2023/10/07
3360
数据在内存中的储存
[C语言]数据在内存中的存储
             C语言标准规定:sizeof(long)>=sizeof(int)>=sizeof(short).
IT编程爱好者
2023/04/12
1.1K0
[C语言]数据在内存中的存储
代码在内存中的'形状'
代码在内存中的'形状' http://zoo.zhengcaiyun.cn/blog/article/code-shape
政采云前端团队
2023/02/27
4860
代码在内存中的'形状'
数据在内存中的存储
计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。 要想学习编程,就必须了解二进制,它是计算机处理数据的基础。 内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示,0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1。 我们通过电路来控
企鹅号小编
2018/01/15
1.3K0
Spring JDBC中NamedParameterJdbcTemplate的使用,包括in的用法
前言 项目中使用到了Spring JDBC, 一般jdbcTemplate基本可以满足我们的需求,我们可以通过?占位符来传参,方式sql注入。 例如: @Override public bo
码农飞哥
2021/03/21
4K0
程序在内存中的分布
1、对于x86 架构的系统来说,器虚拟空间为4GB. 2、高位的1GB为内核空间。3、低位的3GB由Text segment(ELF)、Data segment、Bss segment、Heap、Memory mapping Segment、stack。4、Memory mapping Segment存放Linux的动态链接库 5、对于stack来说,其最大值为8MB。
Elapse
2020/08/17
8590
【C】数据在内存中的存储
有些数值: 只有正数没有负数(年龄)用unsigned 有正有负(温度)用signed
阿伟@t
2023/10/10
2250
【C】数据在内存中的存储
PHP成为首个在内核中嵌入加密库的编程语言
PHP团队最近投票一致通过了“将Libsodium库集成到PHP内核中”的决议,使得PHP成为首个使用公认现代加密库的编程语言。 Libsodium是个便捷,可交叉编译,现代化,易于使用的软件库;可用于加密,解密,签名,密码哈希等。 和PHP源代码一样,Libsodium是用C编写的。如今,很多公司,如Keybase,数字海洋,Riseup,Yandex,Wire和Zcash,已经他们的服务中部署Libsodium。 提出加入Libsodium建议的的开发者是来自Paragon Initiative公司
FB客服
2018/02/23
9530
PHP成为首个在内核中嵌入加密库的编程语言
SDL2库(1)-移植Android 端 CMakeList 集成
项目位置 https://github.com/deepsadness/SDLCmakeDemo
deep_sadness
2018/12/14
2.6K0
SDL2库(1)-移植Android 端 CMakeList 集成
CmakeList的编写和参数详解
在linux 下进行开发很多人选择编写makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量很大,搞的人头很大。采用自动化的项目构建工具cmake 可以将程序员从复杂的makefile 文件中解脱出来。cmake 根据内置的规则和语法来自动生成相关的makefile 文件进行编译,同时还支持静态库和动态库的构建,我把工作中用到的东东总结在此,方便忘记时随时查看,具体cmake的介绍和详细语法还是参考官方文档(http://www.cmake.org/),有一篇中文的cmake 实践 写的不错,可以google一下。
全栈程序员站长
2022/11/15
2.2K0
VS2005下使用GSL-1.15小结
最近在复习高等数学,有时为了验证顺便复习下C语言,看了看自己下载收集的软件,发现C语言有一个数学工具包,是GNU开发的,叫做GSL——GNU Scientific Library,中文:C++科学计算库,主页为www.gnu.org/s/gsl/,主要是在linux环境下运行的,幸好牛人们已经做好了windows版的移植(有条件的就在linux下编译gsl喽),有:Gsl for Windows - GnuWin32 - SourceForge,https://code.google.com/p/oscats/(gsl-1.15-dev-win32.zip 5.9 MB),也可以在windows下安装MSYS或是cygwin下编译源代码获得适合在windows下运行的动态链接库等,具体的我也不太清楚,网上看了,具体的编译流程比较复杂,索性直接下载牛人们编译好的。
用户4645519
2020/09/07
7980
如何在 K8S 中优雅的使用私有镜像库
在企业落地 K8S 的过程中,私有镜像库 (专用镜像库) 必不可少,特别是在 Docker Hub 开始对免费用户限流之后, 越发的体现了搭建私有镜像库的重要性。
落跑架构师M
2020/12/15
3.3K0
Facebook AI 推出“SaLinA”:一个用于实现包括强化学习算法在内的顺序决策模型的轻量级库
深度学习库非常适合促进复杂可微函数的实现。这些函数通常具有 f(x) → y 之类的形状,其中 x 是一组输入张量,y 是通过对这些输入执行多次计算而产生的输出张量。为了实现一个新的 f 函数并创建一个新的原型,需要通过组合运算符组装各种块(或模块)。尽管过程简单,但这种方法无法处理顺序决策方法的实现。经典平台非常适合以有效的方式管理信息的获取、处理和转换。
代码医生工作室
2021/10/21
5080
点击加载更多

相似问题

PythonandC++ (Pybind11):Python扩展模块导入错误

10

如何在Cmakelist中设置库的地址

10

R中的GSL库

20

Qooxdoo contrib库未包括在内

13

创建包括ncurses在内的静态库

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文