所以我有我的主程式,用于dlsym從 dylib 中查找 2 個函式的符號和一個變數,我有一個我不想匯出的變數。
我的問題是,無論我是否使用extern "C"變數,dlsym總會找到我沒有匯出的變數,如果我extern "C"從dlsym程式中找不到它們的函式中洗掉,但無論如何它總會找到變數。
dylib 的代碼:
export "C" char exported_var[2] = { 'a', '\0' };
extern "C" void dylib_quit()
{
...
}
extern "C" void dylib_main()
{
...
}
char hidden_var1[2] = { 'b', '\0' }; // dlsym will still find this
char hidden_var2[2] = { 'b', '\0' }; // dlsym will still find this
程式代碼:
// I want to find all these and I can
dylib_main_fn m_main_fn = (dylib_main_fn)dlsym(handle, "dylib_main");
dylib_quit_fn m_quit_fn = (dylib_quit_fn)dlsym(handle, "dylib_quit");
const char* exported_var = (const char*)dlsym(m_handle, "exported_var");
// And when I do this it will find the "hidden_var1" variable which I don't want happening
// same with "hidden_var2"
const char* hidden_var1 = (const char*)dlsym(m_handle, "hidden_var1");
那么我怎樣才能隱藏變數呢?
我在 MacOS 10.14.6 上使用 Xcode 11.3.1。
uj5u.com熱心網友回復:
使用 -fvisibility=hidden 隱藏符號
出口
dylib 的代碼:
#define EXPORT extern "C" __attribute__((visibility("default")))
EXPORT char exported_var[2] = { 'a', '\0' };
EXPORT void dylib_quit()
{
...
}
EXPORT void dylib_main()
{
...
}
char hidden_var1[2] = { 'b', '\0' };
char hidden_var2[2] = { 'b', '\0' };
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351444.html
