Linux 运行时上未定义的符号,在编译/链接时不会导致错误
我在Google上搜索了一下,也有一些关于StackOverFlow的主题,但它们没有回答主要问题:为什么有时候,在LINUX上的GCC下(我指的是LINUX,因为在MinGW上,它不使用相同的代码),应用程序编译并与其他库正确链接,没有任何错误,然后,在执行时,是否抛出未定义的符号 为什么在编译/链接时没有抛出这个未定义的符号 链接器接受库和代码的原因是什么,即使尚未定义此类函数?为什么仅在执行期间检测到此问题 编辑:Linux 运行时上未定义的符号,在编译/链接时不会导致错误,linux,gcc,dll,linker,shared-libraries,Linux,Gcc,Dll,Linker,Shared Libraries,我在Google上搜索了一下,也有一些关于StackOverFlow的主题,但它们没有回答主要问题:为什么有时候,在LINUX上的GCC下(我指的是LINUX,因为在MinGW上,它不使用相同的代码),应用程序编译并与其他库正确链接,没有任何错误,然后,在执行时,是否抛出未定义的符号 为什么在编译/链接时没有抛出这个未定义的符号 链接器接受库和代码的原因是什么,即使尚未定义此类函数?为什么仅在执行期间检测到此问题 编辑: 例如,我在类a的头文件上有play()方法,但我从未实现过::play()
例如,我在类a的头文件上有play()方法,但我从未实现过::play()。当从另一个项目文件调用此函数时,由于没有实现::play(),该文件链接到定义了类A的初始库,因此不会在应该的时候给我任何未定义的符号错误。稍后,在执行时,应用程序在显式加载库时崩溃,例如,我得到的错误字符串是“undefined symbol play”。很奇怪 你能给出你收到的准确的错误消息吗?听起来你的链接器使用了一个你的操作系统没有的动态库。错误消息和链接命令也可能有用。您的意思是排除dlopen?所有这些库都是我自己编译的库。例如,我在类a的头文件上有play()方法,但我从未实现过::play()。当从另一个项目文件调用此函数时,由于没有实现::play(),该文件链接到定义了类A的初始库,因此不会在应该的时候给我任何未定义的符号错误。稍后,在执行时,应用程序在显式加载库时崩溃,例如,我得到的错误字符串是“undefined symbol play”。很奇怪。。。