一个动态库项目,支持 win32 和 arm64 ,编译器是 msvc 和 gcc ( gcc 是自己从源码编译的,版本 15.1.0 ) 对外暴露一个标准 C API ,其内部实现只有一行代码,调用一个内部名称空间内的方法
int my_foo() { return internal::bar(); } 魔幻的事情是,这个 so 文件,我写一个制台程序去调用它,能顺利进入到bar()中,放到实际项目中bar()根本就没有被调用,于是尝试打印
int my_foo() { std::cout << "111111111111111" << std::endl; std::cout << __FUNCTION__ << std::endl; std::cout << "internal::bar address: " << (long long)((void*)&internal::bar); return internal::bar(); } 好家伙,在 linux 下只能打印前两行,然后函数返回 0 ,但这种情况只发生在项目引用时出现。写一个简单的命令行程序触发完全没问题,win32 下也都没问题。 我想 so 文件已经是二进制了,还能被链接它的程序优化不成?这里卡住了,不知道怎么办 项目均使用了-O2
