我开发了一个C++应用程序,它依赖于外部库依赖关系,主要是SDL。我想将库和DLL文件一起存储在一个不同于.vcxproj
文件的文件夹中。
**问题1:**如何让Visual Studio在文件夹中“找到”这些DLL?
**问题2:**当构建我想存储在同一个文件夹结构中时,如何实现/是否可以实现?
示例:
Project_folder/SDL/SDL_2/lib/x86
->这是SDL 2 DLL。Project_folder/SDL/SDL2_image/lib/x86
->更多DLL。
注意有两个不同的文件夹,我需要Visual Studio来“获取”DLL。
我尝试过的:
关于问题1:How do I set the path to a DLL file in Visual Studio?这似乎对我不起作用,或者至少我不能让它为我工作。但是,如果我将所有DLL存储在指定的文件夹中,它会完成这项工作。
**关于问题2:**关于构建后事件的文档这似乎完成了部分工作。我现在可以将DLL复制到不同的文件夹中,但应用程序无法加载它们,因为它们需要存在于可执行文件所在的位置。
2条答案
按热度按时间neskvpey1#
1.右键单击您的项目,然后单击Add>Com Referance
1.点击“浏览”按钮并选择dll
pbgvytdp2#
问题1的答案:
要包含一个文件夹或多个文件夹中的DLL文件,您可以使用以下命令,在项目的
properties
中指定。添加以下有关查找DLL位置的规范:
Right click your project -> Properties -> Configuration Properties -> Debugging -> Environment ->
个对于一个路径用途:
PATH=$(ProjectDir)\SDL\SDL_2\lib\x86;%PATH%
个对于多个,请在示例中指定
;
:PATH=$(ProjectDir)\SDL\SDL_2\lib\x86;$(ProjectDir)\SDL\SDL2_image\lib\x86;%PATH%
注意事项:
$(ProjectDir)
<-指定项目的根目录PATH=
<-指定项目根目录的绝对路径。必须使用此选项,否则不会在指定路径中查找。%PATH%
<-修改或删除当前引用,但不删除其核心。回答问题2:
为此,您应该将它们直接添加到.exe位置,有一些方法可以绕过它,但它太复杂了,不应该这样做。
我通常如何将所有必需的DLL复制到我的targetDirectory中:
属性->配置属性->构建事件->预链接事件
使用以下命令
copy "$(ProjectDir)DLLs\*.dll" "$(TargetDir)" ping -n 6 127.0.0.1 > nul
个下面的代码获取所有.dll结尾并将它们添加到TargetDir。
ping用于延迟它,以便它们在“复制”运行时正确链接,但继续其余部分,该示例中的链接将不正确。
要从不同的文件夹加载它们,应该在代码本身内部完成。
一些参考资料使用或良好的阅读: