omnet++ - INET错误:无法加载库“../../src//libINET.dll”:找不到指定的模块
问题描述
我已经做了
1.下载omnetpp-5.5.1-src-windows.zip
2.解压
3.运行mingwenv.cmd
4.配置&制作
5.运行omnetpp
6.勾选“Install INET ...”复选框(默认勾选)
7.进入inet/tutorials/wireless/omnetpp.ini,点击运行
失败的。
总结一下,我什么都没改,只是下载运行inet的教程。
OMNeT++ Discrete Event Simulation (C) 1992-2019 Andras Varga, OpenSim Ltd. Version: 5.5.1, build: 190613-08ba16f914, edition: Academic Public License -- NOT FOR COMMERCIAL USE See the license for distribution terms and warranty disclaimer
<!> Error: Cannot load library '../../src//libINET.dll': 找不到指定的程序?
End.
Simulation terminated with exit code: 1 Working directory: E:/omnetpp-5.5.1/samples/inet/tutorials/wireless Command line: ../../../../bin/opp_run.exe -m -n ../../src;../../examples;..;../../showcases --image-path=../../images
-l ../../src/INET omnetpp.ini
Environment variables: PATH=;E:/omnetpp-5.5.1/samples/inet/src;E:\omnetpp-5.5.1\bin;E:\omnetpp-5.5.1\tools\win64\mingw64\bin;E:\omnetpp-5.5.1\tools\win64\usr\bin;;E:/omnetpp-5.5.1/ide/jre/bin/server;E:/omnetpp-5.5.1/ide/jre/bin;E:/omnetpp-5.5.1/ide/jre/lib/amd64;.;E:\omnetpp-5.5.1\bin;E:\omnetpp-5.5.1\tools\win64\mingw64\bin;E:\omnetpp-5.5.1\tools\win64\usr\local\bin;E:\omnetpp-5.5.1\tools\win64\usr\bin;E:\omnetpp-5.5.1\tools\win64\usr\bin;C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;E:\omnetpp-5.5.1\tools\win64\usr\bin\site_perl;E:\omnetpp-5.5.1\tools\win64\usr\bin\vendor_perl;E:\omnetpp-5.5.1\tools\win64\usr\bin\core_perl;E:\omnetpp-5.5.1; OMNETPP_ROOT=E:/omnetpp-5.5.1/ OMNETPP_IMAGE_PATH=E:\omnetpp-5.5.1\images
我在命令行中运行它也是相同的错误消息。
实际上这不是winpcap的问题,因为我用谷歌搜索了所有关于安装winpcap的答案,但我试过它不起作用。而那些情况是无法建立inet的。
但!!!!在我的情况下,omnetpp 和 inet 都构建成功了!所以实际上我有这个文件(libINET.dll)。所以这一点太奇怪了。
21:04:19 **** Incremental Build of configuration release for project inet ****
make MODE=release -j4 all
cd src && /usr/bin/make
make[1]: Entering directory '/e/omnetpp-5.5.1/samples/inet/src'
*** COMPILING with:
clang++ -c -std=c++11 -O3 -DNDEBUG=1 -MMD -MP -MF .d -isystem /usr/include -isystem /mingw64/include -Wno-deprecated-register -Wno-unused-function -fno-stack-protector -DXMLPARSER=libxml -DPREFER_QTENV -DWITH_QTENV -DWITH_PARSIM -DWITH_NETBUILDER -DWITH_OSG -DWITH_OSGEARTH -DINET_EXPORT -Wno-overloaded-virtual -include inet/common/precompiled_release.h -DINET_EXPORT -I. -IE:/omnetpp-5.5.1/include
*** LINKING with:
clang++ -shared -o ../out/clang-release/src/libINET.dll -Wl,--no-as-needed -Wl,--whole-archive -lws2_32 -Wl,--no-whole-archive -loppenvir -loppsim -lstdc++ -losg -losgText -losgDB -losgGA -losgViewer -losgUtil -lOpenThreads -losgEarth -losgEarthUtil -Wl,-rpath,E:/omnetpp-5.5.1/lib -Wl,-rpath,E:/omnetpp-5.5.1/tools/win64/lib -Wl,-rpath,. -L/usr/bin -L/usr/lib -L/mingw64/lib -LE:/omnetpp-5.5.1/lib
Building...
make[1]: Nothing to be done for 'all-pch'.
make[1]: Leaving directory '/e/omnetpp-5.5.1/samples/inet/src'
21:04:22 Build Finished. 0 errors, 0 warnings. (took 3s.519ms)
但我可以运行tictok。所以我认为 omnet++ 有效,只有 Inet 无效。
我检查了我的 %PATH% 是正常的。
我正在使用 Windows 7 64 位。实际上,我在虚拟机上新安装的相同版本的 win7 或 win10 中执行了相同的步骤,一切正常。
当然,我尝试重新构建一切,甚至重新下载 omnet++ 包。
而且我还检查了有关我的操作系统的所有内容似乎没有问题,并且我的操作系统中的其他软件都可以正常工作。
那么我能做什么,我现在应该做什么?
谢谢!
解决方案
最后我通过使用 Process Monitor 分析它加载的 dll 解决了这个问题。左侧不工作,右侧在虚拟机中正常工作。
我发现不同之处在于它加载的最终 DLL 是 libeay32.dll,来自 SYSTEM32,然后崩溃了。在工作的虚拟机中,它从 omnet++ 自己的文件夹加载,并继续加载其他 dll。
所以我发现system32的libeay32.dll版本不对,是其他软件安装的。这是一个 OpenSSL dll 和一个使用 OpenSSL 的软件,它在安装时将旧版本的 OpenSSL 放在 SYSTEM32 中。所以我只是从 SYSTEM32 中删除 libeay32.dll,现在一切正常。