Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C “原因”;“无法找到入口点”;在不相关的DLL中?_C_Qt_Visual Studio 2008_Glib_Matlab Deployment - Fatal编程技术网

C “原因”;“无法找到入口点”;在不相关的DLL中?

C “原因”;“无法找到入口点”;在不相关的DLL中?,c,qt,visual-studio-2008,glib,matlab-deployment,C,Qt,Visual Studio 2008,Glib,Matlab Deployment,在您将此问题视为重复之前,此问题与其他许多类似问题不同,因为错误消息中的函数与DLL完全无关 应用程序和版本信息 我在Visual Studio 2008 RTM中有一个32位应用程序,它使用MATLAB编译器4.17(R2012a)生成的DLL、Glib(2.32.4,来自GStreamer SDK 2012.9 32位的二进制文件)和Qt(4.8.3-vs2008),所有这些都运行在Windows 7 x64 SP1上 问题 调试构建运行良好,但在发行版中,我得到了臭名昭著的过程入口点lib

在您将此问题视为重复之前,此问题与其他许多类似问题不同,因为错误消息中的函数与DLL完全无关

应用程序和版本信息 我在Visual Studio 2008 RTM中有一个32位应用程序,它使用MATLAB编译器4.17(R2012a)生成的DLL、Glib(2.32.4,来自GStreamer SDK 2012.9 32位的二进制文件)和Qt(4.8.3-vs2008),所有这些都运行在Windows 7 x64 SP1上

问题 调试构建运行良好,但在发行版中,我得到了臭名昭著的
过程入口点libXXXInitialize无法在动态链接库libglib-2.0-0.dll中找到。
奇怪的是,这个libXXXInitialize函数(它确实存在于基于MATLAB的dll中)与libglib-2.0-0.dll完全无关

我的研究 我检查了显而易见的问题,确保所有库都是用VS2008编译的(除了GStreamer/GLib是用mingw编译的,但是因为它是纯C,所以不应该有任何问题),并检查路径中的DLL的任何其他版本。看来这一定是某种链接器的问题

更新1 在Dependency Walker x86中,它将此
libxxxiInitialize
显示为一个未解析的(父)导入,不仅来自libglib-2.0-0.dll,还来自所有其他GLib/GStreamer dll,但是函数在应该找到它的dll libXXX.dll中正确解析

更新2 我删除了对
libXXXInitialize
的调用,并从MATLAB编译器运行时调用了
mclInitializeApplication
,现在该函数无法从glib DLL解析

但是我找到了一个解决方案(至少是暂时的),将链接器选项从更改为
/OPT:NOREF
修复了问题(因此链接器“保留从未引用过的函数和/或数据)。奇怪的是,我确实明确使用了
mclinitializapplication
函数,如果我打开
/VERBOSE:REF
,它不会显示它被删除

更新3 终于在上的其他地方发现了这一点。我在中发现了这一点,作为GStreamer SDK的一部分。建议的解决方法是我已经在做的,禁用OptimizeReferences

如果有人能告诉我为什么会发生这种情况,我会把它作为答案