[英]Function name changed in library
我有一個小的查詢,如下所示。
我從下面的代碼創建了一個共享庫。
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 ++名稱修改 。 要關閉它,請將函數聲明為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);
}
如果也將extern "C"
添加到實現中,它應該可以工作。 help.h文件不參與編譯過程。 但是,有一種更好的方法: #include "help.h"
作為cpp文件的第一行,它驗證它可以自己包含並且在頭文件中聲明的函數定義匹配。
更多注意事項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.