c++ - dlsym 找不到 nm 列出的符号
问题描述
我在使用以下简单示例程序时遇到问题,当我在基于 ubuntu:bionic 的 docker 容器中编译和运行程序时,在我的 mac 上运行(我不明白为什么这会相关,但我想强调我在我的 Mac 上本地运行这个程序没有问题)。
#include <dlfcn.h>
#include <iostream>
extern "C" void myFunc() { }
int main() {
auto handle = dlopen(NULL, RTLD_LAZY|RTLD_GLOBAL );
dlerror();
std::cout << "symbol addr = " << dlsym(handle,"myFunc") << std::endl;
if (auto e = dlerror(); e) std::cout << " error = " << e << std::endl;
dlclose(handle);
return 0;
}
输出是:
symbol addr = 0
error = ./myExe: undefined symbol: myFunc
但如果我这样做了,nm ./myExe
我会看到:0000000000000be0 T myFunc
列为 day
为了比较,在mac(clang编译器)上编译和运行完全相同的东西我得到:
symbol addr = 0x10ccdc090
和 nm 列表:(0000000100001080 T _myFunc
我注意到在 mac 上下划线前缀似乎是一个东西,但不影响 dlsym 找到符号)
说真的,我在这里错过了什么?谢谢!
解决方案
推荐阅读
- html - 避免在打印时使用行跨度的表格中的分页符
- python - 确保 threading.Timer 在主线程之前完成
- javascript - 使用一个 switch 语句组合多个路由
- python - 用于 NVIDIA Jetson Nano 的 PyTorch 的 Yocto Warrior Bitbake 配方
- oauth-2.0 - 谷歌云函数 REST API 身份验证
- laravel - Laravel Demo vs Live Application Site---> 从一个到另一个访问模型
- docker-compose - Docker-stack - 始终从 hub.docker.com 获取图像
- excel - 如何在列中找到相同的数据并填充颜色以显示它们?
- javascript - highcharts-angular 不渲染图表
- css - CSS 关键字被认为是“实验性的”是什么意思?