gpt4 book ai didi

c++ - 库中的函数名称已更改

转载 作者:行者123 更新时间:2023-11-27 23:19:30 25 4
gpt4 key购买 nike

我有一个小查询如下。

我已经从下面的代码创建了一个共享库。

help.h

#include<iostream>
#include<signal.h>
#include<unistd.h>

using namespace std;

void killMe(int sig_num);

void printMe(void);

help.cpp

#include<iostream>
#include<signal.h>
#include<unistd.h>

using namespace std;

void killMe(int sig_num)
{
cout<<"Timeout occurred."<<endl;
raise(SIGKILL);
}

void printMe()
{
cout<<"This is help.cpp"<<endl;
}

[root@localhost DL]# nm -n /usr/local/lib/libmyhelp.so | grep " T "
00000584 T _init
00000760 T _Z6killMei
000007ae T _Z7printMev
00000864 T _fini
[root@localhost DL]#

检查 nm 的输出,我发现 killMe 和 printMe 函数的名称已稍作更改。有没有办法在共享库中保留与 cpp 代码中相同的名称?谢谢。

最佳答案

这是由于 C++ name mangling .要关闭它,请将函数声明为 extern "C"

help.h:

#include<iostream>
#include<signal.h>
#include<unistd.h>

using namespace std;

extern "C" {

void killMe(int sig_num);

void printMe(void);

}

关于c++ - 库中的函数名称已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com