混合-在Matlab中使用.a代替带有curl的.lib文件

恩乔耶

我有一个Matlab S函数(几周前我用cURL创建了这个函数)。这只是一个例子,但足以说明我的观点。

在此示例中,我cURL用于发出HTTP-Request以获取数据并将该数据输出到Matlab Simulink中。

最初,我在Mac OSX上编译了此代码,在与mex-command进行了一点努力之后,该代码仍然可以正常工作现在,对于Windows系统,我必须再次执行相同的操作。

我可以libcurl.a使用Windows编译文件,mingw32但是当尝试使用mex file.cpp -L. -llibcurlor编译mexfile时mex file.cpp -L. -llibcurl -I.curl(curl是include文件夹,我相应地调整了#include语句)我只得到了Matlab找不到的错误,libcurl.lib到目前为止我没有找到查找设置以mex使用.a后缀。

我对C ++代码编译不太了解,所以请不要太苛刻,但是我是否错过了一些重要的事情(例如构建.lib自身(我也没有找到任何信息,只是预编译的文件没有这样做))也可以))。

这位Matlab用户也建议更改后缀会有所帮助,不是,不是。在OSX上,将二进制文件等链接起来的编译非常简单。(有关如何执行此操作的信息,请参见GitHub Repo的自述文件),但似乎我无法全神贯注地在Windows上做同样的事情。

系统:Windows 10 64位和Windows 7 64位(均尝试)

错误消息:现在无法访问,可能明天更新,根据我使用的编译命令,我基本上得到了两种不同。

  1. 是标准(很可能是因为我根本没有无意间链接头文件)

    test.c:(.text+0xe1): undefined reference to curl_global_init' test.c:(.text+0xe6): undefined reference to curl_easy_init' test.c:(.text+0x10c): undefined reference to curl_easy_setopt' test.c:(.text+0x12e): undefined reference to curl_easy_setopt' test.c:(.text+0x150): undefined reference to curl_easy_setopt' test.c:(.text+0x17e): undefined reference to curl_easy_cleanup' test.c:(.text+0x1b3): undefined reference to curl_easy_cleanup' test.c:(.text+0x1db): undefined reference to curl_easy_setopt' test.c:(.text+0x1e7): undefined reference to curl_easy_perform' test.c:(.text+0x1ff): undefined reference to curl_easy_cleanup'

  2. 一个被提到 no such file or directory: 'libcurl.a.lib'

注意,第一个错误消息不是我的,我举个例子。

因此,这里的主要问题是:有没有一种方法可以libcurl.lib在Windows上创建文件,如果可以,如何使用Mingw32或其他编译器来创建文件?

谢谢你们已经:)

恩乔耶

好的,由于@drescherjm将我指向Visual Studio,因此没有一个新的答案,因此我进行了更多研究,因此我能够在Windows上构建项目。

先决条件:

  1. Microsoft Visual Studio 2017(社区)-对于.lib编译
  2. Microsoft Visual Studio 2015(社区)-用于MatLab中的mex编译

安装VS 2017之后,我关注了这篇文章。如果您不懂德语,那么下面的部分适合您:

打开您的CMD并执行

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" (对于32位系统)

要么

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" (对于64位系统)。

.bat-files之间的64/32位差异起初就欺骗了我,导致了另一个错误,因此请注意选择正确的文件。

之后,cd转到您的cURL文件夹(curl_download_folder\winbuild)。(您是从官方页面之前下载的)。并执行以下命令:nmake /f Makefile.vc mode=static VC=12

这将编译在MatLab中运行cURL所需的所有文件,并将其也集成到任何其他程序中。

现在应该有一些其中包含文件的文件夹curl_download_folder\builds即:

  1. libcurl-vc12-x64-release-static-ipv6-ssl
  2. libcurl-vc12-x64-release-static-ipv6-ssl-obj-curl
  3. libcurl-vc12-x64-release-static-ipv6-ssl-obj-lib

三,将整个\builds文件夹复制到包含.cpp要编译文件的MatLab工作目录中

III(/ 2)。如果到目前为止您还没有这样做,请将编译器设置为Microsoft Visual C++ 2015 Professionalwithmex -setup cppmex -setup c++

IV。sfunc.cpp使用以下命令编译您的S函数():

mex sfunc.cpp -lbuilds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\include\ -Lbuilds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\lib\ -llibcurl_a.lib -DCURL_STATICLIB

五,瞧,你的.mexw64-file应该正确编译。-D在这种情况下标志非常重要。\builds文件夹,您需要全部使用!)

谢谢大家的帮助。

编辑:如果您使用的是32位系统,只需将x64答案中的每一个替换x86

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在MATLAB中使用混合数据打开.gz文件

使用autocrlf = true的Git可以按原样签出带有混合行结尾的文件

使用Java读取具有混合数据的文件

如何在MATLAB MEX文件中使用FFTW lib文件?

XML ::在perl中简单,带有混合的xml文件

导入带有两个混合列的 Txt 文件

在Matlab中使用imfuse来混合灰度图像

在`lib`文件夹中使用`src`子文件夹有什么好处?

使用Python从CSV文件创建混合图表

应用带有灰度的混合混合模式

在req.xml文件中使用带有$ {=(System.nanoTime())}的curl

如何在 C++ 中使用带有提交字段的 CURL formadd 上传文件?

使用curl上传带有文件的POST数据

在文件名中使用适当的文件夹名对混合文件进行排序

使用Boost.Spirit解析具有混合数据类型的OBJ文件?

在Qt中使用第三方dll(没有可用的.lib文件)

如何在混合代码的Objective-C / C ++文件(.mm文件)中使用PHPhotoLibrary?

如何在C ++中使用混合文本和二进制文件读取大文件

通过静态文件(混合模型)在 Django teamplates 中使用 React JS 组件 - 有什么问题?(新手 JS/React 问题)

在Scenekit中使用混合功能

是否有可能使用ReSharper的与混合?

什么时候在OpenID Connect中使用带有response_type = code id_token令牌的混合流?

在终端中使用带有curl的“ if”语句?

带有curl的Cronjob php文件可在浏览器中使用,但在crontab上却无法使用

在 ffmpeg 中使用混合音轨的文件添加另一个音频

在 Python 中使用带有文件的开关

如何使用ffmpeg将音频/视频文件与具有偏移量的音频文件混合?

如何在Scala或Java中读取带有混合编码的文本文件?

串联视频文件(带有音频)并在音频配音中混合