我一直在研究一个跨平台的窗口库,专门用于 OpenGL,目前专注于 linux。我正在使用 glload 来管理 OpenGL 扩展,并且正在将其与我稍后将使用的其他库一起编译为.so
. 正如您所期望的那样,这个 `.so 正在动态加载,但在运行时程序会提供以下输出(手动包装,因此更易于阅读):
_dist/x64-linux-debug/bin/test: Symbol `glXCreateContextAttribsARB' has \
different size in shared object, consider re-linking
现在,显然我已经尝试过重新链接,甚至多次重建整个项目(测试一下,而不是盲目地希望它会神奇地让一切变得更好)。该程序似乎确实愿意运行,因为它会产生一些我期望的日志输出。我曾经nm
确认“符号”在.so
nm _dist/x64-linux-debug/lib64/libvendor.so | grep glXCreateContextAttribsARB
00000000009e0e78 B glXCreateContextAttribsARB
如果我readelf
用来查看正在定义的符号,我会得到以下信息(同样,为了格式化,我手动包装了前三行):
readelf -Ws _dist/x64-linux-debug/bin/test \
_dist/x64-linux-debug/lib64/libvendor.so | \
grep glXCreateContextAttribsARB
348: 000000000062b318 8 OBJECT GLOBAL DEFAULT 26 glXCreateContextAttribsARB
421: 000000000062b318 8 OBJECT GLOBAL DEFAULT 26 glXCreateContextAttribsARB
1370: 00000000009e0e78 8 OBJECT GLOBAL DEFAULT 25 glXCreateContextAttribsARB
17464: 00000000009e0e78 8 OBJECT GLOBAL DEFAULT 25 glXCreateContextAttribsARB
恐怕这就是我能提供的所有帮助,因为我真的不知道该尝试或研究什么。就像我说的,我确信需要更多信息,所以请说我会提供我能提供的。我正在从我的项目根目录运行这些命令,以防您想知道。