- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Matlab S-Function (几周前我用 cURL 创建了这个)。这只是一个例子,但足以阐明我的观点。
在本例中,我使用 cURL
生成一个 HTTP
请求,以便获取数据并将该数据输出到 Matlab Simulink 中。
最初我在 Mac OSX 上编译了这段代码,在使用 mex
-command 进行了一些努力之后,它运行良好。现在我必须再次做同样的事情,但对于 Windows 系统。
我可以使用 mingw32
为 Windows 编译 libcurl.a
文件,但是当我尝试使用 mex file.cpp -L 编译 mexfile 时。 -llibcurl
或 mex file.cpp -L。 -llibcurl -I.curl
(curl 是包含文件夹,我相应地调整了 #include
语句)我只得到 Matlab 找不到 libcurl.lib< 的错误
到目前为止,我还没有找到使 mex
使用 .a
后缀的设置。
我不太了解 C++ 代码编译,所以请不要太苛刻,但我是否错过了一些重要的事情(比如构建 .lib
本身(我也没有)找不到任何信息,只是预编译的文件不能正常工作))。
还有这个 Matlab 用户建议更改后缀会有帮助,不,它没有。在 OSX 上,链接二进制文件等的编译非常简单(请参阅 GitHub Repo 的自述文件以了解我是如何在那里做的信息)但似乎我无法在 Windows 上做同样的事情。
系统:Windows 10 64 位和 Windows 7 64 位(都试过了)
错误消息:现在无法访问它,明天可能会更新,我基本上得到了两个不同的消息,具体取决于我使用的编译命令。
是标准(这很可能是因为我无意中没有链接头文件)
test.c:(.text+0xe1): 未定义对 curl_global_init 的引用'
test.c:(.text+0xe6): 对 curl_easy_init 的 undefined reference
test.c:(.text+0x10c): 未定义对 curl_easy_setopt 的引用'
test.c:(.text+0x12e): 未定义对 curl_easy_setopt 的引用'
test.c:(.text+0x150): 对 curl_easy_setopt 的 undefined reference
test.c:(.text+0x17e): 未定义对 curl_easy_cleanup 的引用'
test.c:(.text+0x1b3): 未定义对 curl_easy_cleanup 的引用'
test.c:(.text+0x1db): 未定义对 curl_easy_setopt 的引用'
test.c:(.text+0x1e7): 未定义对 curl_easy_perform 的引用'
test.c:(.text+0x1ff): 对 curl_easy_cleanup 的 undefined reference '
没有这样的文件或目录:'libcurl.a.lib'
注意第一个错误信息不是我的,我把它举个例子
所以这里的主要问题是:有没有办法在 Windows 上创建 libcurl.lib
文件,如果可以,我该如何使用 Mingw32 或其他编译器创建它?
谢谢你们了:)
最佳答案
好吧,既然没有人给出新的答案,我做了更多研究,感谢@drescherjm 将我指向 Visual Studio,我能够在 Windows 上构建项目。
先决条件:
安装 VS 2017 后,我关注了 this文章。如果您不懂德语,以下部分适合您:
我。打开你的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
文件之间的 64/32 位差异一开始让我蒙蔽,导致了另一个错误,所以请注意选择正确的文件。
二。然后 cd
到您的 cURL 文件夹 (curl_download_folder\winbuild
)。 (您之前从 official page 下载的)。并执行此命令:nmake/f Makefile.vc mode=static VC=12
这会编译在 MatLab 中运行 cURL 并将其集成到任何其他程序中所需的所有文件。
现在 curl_download_folder\builds
中应该有一些包含文件的文件夹。即:
libcurl-vc12-x64-release-static-ipv6-ssl
libcurl-vc12-x64-release-static-ipv6-ssl-obj-curl
libcurl-vc12-x64-release-static-ipv6-ssl-obj-lib
III. 将整个 \builds
文件夹复制到包含要编译的 .cpp
文件的 MatLab 工作目录。
III(/2). 如果到目前为止您还没有这样做,请使用 mex -setup cpp 将编译器设置为
或 Microsoft Visual C++ 2015 Professional
mex -setup c++
IV. 使用以下命令编译您的 S-Function (sfunc.cpp
):
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
V. 瞧,您的 .mexw64
文件应该可以正确编译。 (在这种情况下,-D
标志非常重要。\builds
文件夹,你需要它们!)
谢谢大家的帮助。
编辑:如果您使用的是 32 位系统,只需将我的回答中的每个 x64
替换为 x86
。
关于c++ - mex - 在 matlab 中使用 .a 而不是带有 curl 的 .lib 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46224018/
我试图通过用 C++ 编写一些函数并使用 mex 接口(interface)来集成它们来加速我的 Matlab 程序。我在 C++ 的向量中得到了我的结果。我想将它传输到 MATLAB 中的数组。我知
我用 C++ 编写了带有服务器和客户端的 TCPIP 套接字连接,它在 VisualStudio 中工作得很好。现在我想通过 MEX 文件在 MATLAB/Simulink 中使用 C++ - 客户端
我有返回 C++ 主机端数组的 cuda/C++ 代码。我想在 MATLAB 中操作这些数组,所以我用 mex 格式重写了我的代码并用 mex 编译。 我通过将预分配的数组从 MATLAB 传递到 m
我正在尝试将一段代码从 Matlab 转换为 python。我正在运行 Ubuntu 16.04LTS,需要依靠 Octave 来运行引用代码(Matlab 安装时出现深奥错误)。无论如何,以前从未使
我使用 VS2010 C-编译器在 Windows8 上开发了一个 Matlab mex 文件。很长一段时间,一切都很顺利…… 但是现在,mex 文件会阻止代码中的所有更改。无论我更改哪一行代码,重建
我的 C 代码应该将 Matlab 稀疏格式转换为 TAUCS format 也是列的主要格式。 当然,我是在 Matlab 本身生成 Matlab 稀疏格式,然后将其传输到 mex 文件。 代码编译
这是我编写的用于在制表符分隔文件中读取的 mex 代码。 mex 文件已创建,但它导致我的 MATLAB 突然结束并给出以下错误。谁能帮助我哪里出错了?如果需要任何进一步的信息,请告诉我 异常终止:分
我有一个 Matlab mex 函数,它重复调用名为 calculate(). 的 C 函数我制作了两个版本的函数: 版本A:每次mex()来电 calculate() ,它只传递输入参数,以及cal
我正在尝试在 MATLAB 中构建一个 mex 函数。该函数依赖于 C++ 库。但是,无论我做什么,我都会在 MATLAB 中得到 Unresolved external 问题。我创建了三个简单的文件
我正在尝试从 C++ 源代码编译一些 MATLAB MEX 文件。我正在尝试编译的文件 can be found here ;我在 32 位系统 MATLAB 2012a 上使用 Windows XP
我使用 mxCreateSparse 在 MEX 中创建了一个稀疏矩阵. mxArray *W; W=mxCreateSparse(n*n,n*n,xsize,mxREAL); double *wpo
我正在尝试在 C 语言的 MEX 文件中实现一些基本的线性代数例程以进行练习,但我被点积困住了。这是我到目前为止所拥有的: #define char16_t UINT16_T //shenanigan
我是编写 MEX 函数的新手,我有内存问题。 MEXf 逍遥法外的套路如下: void mexFunction (int nlhs, mxArray *plhs[], int nrhs,const m
我这里有一个可以正确执行的 C mex 文件,但是在执行完成后 MATLAB 因段错误而崩溃。由于它在程序完成执行后崩溃,这让我认为 MATLAB 自动释放分配的内存导致了这个问题。但是,我释放了我自
我有一个简单的 mex 函数,它从库中调用另一个 C++ 函数。我用编译源代码 mex -cxx mymexfunction.cpp -I/some/include -L/some/lib -lmyl
我正在寻找一种算法来找到 mex但除了这个 wiki 链接,找不到任何有用的东西。 看完后我拉出这段代码: nList = [int(x) for x in input().split()] nLis
我希望仅在通过 Matlab 中的 mex 命令编译我的代码时包含某个头文件。如果它是直接用 Visual Studio 编译的,我不希望包含它。 是否有一个宏可以帮助解决这个问题? 我想做这样的事情
如何在用 C 编写的 MEX 文件中创建二维稀疏矩阵。创建矩阵后如何像在 C 中一样单独访问元素,比如 mat[i][j]? 我厌倦了使用 mxCreateNumericArray函数,但我无法访问元
我正在尝试编译 a matlab wrapper for libdc1394这是一个用于火线相机的库。我收到一个奇怪的错误,涉及头文件中的一些内联函数。我正在使用 gcc-4.6 开发 ubuntu
我需要尽快将大量数据写入磁盘。在 MATLAB 中,我可以使用 fwrite 来做到这一点: function writeBinaryFileMatlab(data) fid = fopen(
我是一名优秀的程序员,十分优秀!