- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个共享库“libsharedlib.so”,它曾经是从 C 文件生成的。由于该库现在需要使用第三方 C++ 库中的函数,因此我想将我的共享库从 C 转换为 C++(代码相对简单)。基于我读过的差异here ,我必须做的唯一调整是使用 stdlib 和 stdio 函数。标题已更改为
#include <stdio.h>
#include <stlib.h>
至
#include <cstdlib>
#include <cstdio>
对这些库中函数的所有调用都以 std::
命名空间为前缀(例如 std::malloc
而不是 malloc
,我没有使用using namespace std
)。源文件扩展名从 .c 更改为 .cpp。我还必须在每个文件的末尾添加换行符,并且必须强制转换我的 malloc
。此后没有其他编译器反馈。使用以下命令编译共享库:
pgcpp -shared -I./inc/ -o ./lib/libsharedlib.so file1.cpp file2.cpp ...
并且不返回任何错误或警告。
我现在有一个 MEX 函数 mex_gateway.cpp
,它调用此库中的函数:
#include "sharedlibraryheader.h"
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]){
...
function_from_library(data);
}
使用以下命令编译
mex -L./lib/ -lsharedlib -I./inc/ mex_gateway.cpp
(当添加详细标志 -v
时)实际上执行以下命令:
g++ -c -I./inc/ -I/opt/MATLAB/R2013b/extern/include -I/opt/MATLAB/R2013b/simulink/include -DMATLAB_MEX_FILE -ansi -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread -DMX_COMPAT_32 -O -DNDEBUG "mex_gateway.cpp"
g++ -O -pthread -shared -Wl,--version-script,/opt/MATLAB/R2013b/extern/lib/glnxa64/mexFunction.map -Wl,--no-undefined -o "mex_gateway.mexa64" mex_gateway.o -L./lib/ -lsharedlib -Wl,-rpath-link,/opt/MATLAB/R2013b/bin/glnxa64 -L/opt/MATLAB/R2013b/bin/glnxa64 -lmx -lmex -lmat -lm
我收到以下错误:
mex_gateway.o: In function `mexFunction':
mex_gateway.cpp:(.text+0x24e): undefined reference to `function_from_library(...arguments...)'
collect2: ld returned 1 exit status
mex: link of ' "mex_gateway.mexa64"' failed.
当然,我对构建命令进行了三次检查,其中包含共享库的正确路径和库名称。共享库确实有函数的定义:
[user@machine]$ nm lib/libsharedlib.so | grep function_from_library
000000000000198a t __function_from_library__FPCdN51dN27iiiiPdPdPdPdPdPdEND
0000000000001360 T function_from_library__FPCdN51dN27iiiiPdPdPdPdPdPd
那么问题出在哪里呢?
编辑:我的 sharedlibraryheader.h
文件如下所示:
#ifndef __SHAREDLIBRARYHEADER_H__
#define __SHAREDLIBRARYHEADER_H__
#ifdef _cplusplus
extern "C"{
#endif
int function1 ( ... );
...
void function_from_library( ... );
...
#ifdef _cplusplus
}
#endif
#endif
最佳答案
您必须执行以下操作:
extern "C" {
#include "sharedlibraryheader.h"
}
这将使编译器知道在 sharedlibraryheader.h
中定义的函数符合 C ABI 而不是 C++ ABI。通常,这是在 header 本身中按以下方式处理的:
// Typically put headers outside extern "C"
#include "..."
#include "..."
#ifdef __cplusplus
extern "C" {
#endif
... rest of header here ...
#ifdef __cplusplus
}
#endif
在编译时,您必须对使用共享库的代码和共享库本身执行此操作。
关于c++ - 从 C 转换为 C++ 后对共享库函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24961475/
我只是有一个更琐碎的问题。 为什么undefined == undefined 返回true,而undefined >= undefined 为false? undefined 等于 undefine
用PHP 7.2编写套接字服务器。根据Firefox 60中的“网络”选项卡,服务器的一些HTTP响应的第一行随机变为undefined undefined undefined。因此,我尝试记录套接字
在 JavaScript 中这是真的: undefined == undefined 但这是错误的: undefined <= undefined 起初我以为<=运算符包含第一个,但我猜它试图将其转换
在回答这个问题 (Difference between [Object, Object] and Array(2)) 时,我在 JavaScript 数组中遇到了一些我以前不知道的东西(具有讽刺意味的
来自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/of , Note: thi
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
当我添加 到我的 PrimeFaces Mobile 页面,然后我在服务器日志中收到以下警告 WARNING: JSF1064: Unable to find or serve resource, u
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我是一名优秀的程序员,十分优秀!