草庐IT

MSVC_and_MinGW_DLLs

全部标签

c++ - 使用 CMake 在 Windows (MSVC) 中查找库

我在尝试链接MSVC中的库时遇到问题。我有一些为发布和调试编译的外部依赖项,并将它们设置在不同的文件夹中(${PROJECT_SOURCE_DIR}/External/Debug/lib和${PROJECT_SOURCE_DIR}/External/Release/lib)。我写了一些FindFoo.cmake模块,作为find_library命令的提示,${EXTERNAL_LIB_DIR}根据${CMAKE_BUILD_TYPE}设置。这项工作在Linux上完美,但在Windows上失败(它总是将EXTERNAL_LIB_DIR路径设置为调试路径)并且由于_ITERATOR_DEB

windows - 批处理 : Search for string to skip lines above and write results to new file

我已经成功地编写了一个脚本,它接受一个字符串来在特定文件中搜索,然后输出它第一次出现的行,然后我将该值放入for循环并跳过解析该行数并将其内容写入新文件。但是,我没有得到空行,我发现这些空行很难解决。我要搜索的字符串是“/]”,在它出现的地方缓存行号,然后用逗号分隔将它累积到一个变量中。然后我将该变量再次放入for循环中,并检索第一个出现的值作为我的最终“跳过此行数”变量,然后我在底部使用for循环再次读取该文件并将其值写入一个新文件并跳过文件开头的行数。下面是执行我上面描述的脚本的部分:setlocalenabledelayedexpansionsetlocalenableexten

windows - 一起使用cygwin和mingw

我想使用mingw编译器和一些来自mingw-get的mingw东西我想使用cygwin附带的bash和unix工具。因为MSYS有一些不足。如果可能的话,我还希望能够从使用cygwin-gcc“切换”到mingwone,然后再使用相同的bashsession切换回来。我安装了C:\cygwin和C:\mingw并且可以正常工作 最佳答案 MinGW编译器以Cygwin包的形式提供。MinGW-w64编译器也可以作为Cygwin包使用。这样既可以在Linux环境下使用Cygwin,又可以编译出不依赖Cygwindll的可执行文件。我

c++ - 模板特化导致 Windows 上的 MinGW 链接错误,而不是 Linux 上的 GCC

以下build设置在使用GCC(4.6.3)的Linux上运行良好,但不适用于使用GCC(4.7.2)的MinGW。$catMakefileall:g++-cfoo.cppg++-cbar.cppg++bar.ofoo.o-obar$catfoo.h#ifndefFOO_H#defineFOO_H#includetemplatevoidfoo(Tx){std::cout$catfoo.cpp#include"foo.h"templatevoidfoo(intx){std::cout$catbar.cpp#include"foo.h"intmain(){foo(1);}在Linux上,我

c++ - rand_r 不在范围内,gcc mingw 在 Windows 上的 cygwin 下

我正在尝试将一些代码从linux移植到cygwin下的windows。我发现这个奇怪的错误,其中“rand_r未在此范围内声明”。我将gcc4.8.1用作x86_64-w64-mingw32并且在它的搜索路径(-v选项)中它确实在正确的目录中查找。头文件已正确包含。我正在寻找解决这个问题的想法。是否有关于cygwin的一些事实我遗漏了,因此遇到了这个问题?有没有办法检查gcc是否确实接触了所需的文件? 最佳答案 与标准的rand函数相比,rand_r函数被认为是线程安全的。参见man3rand_r.一种选择是通过封装对rand的调用

C++ 中间函数 Hook : get register values and jump back [x86 assembly on windows]

在寄存器EBP中有一个int值,在EBX中有一个字符串。我需要在我自己的函数中从这些寄存器中获取值,对它们进行一些操作,最后跳回下面的一些代码。我在0x46AA17处对名为JmpHook的函数执行了一个JMP。voidJmpHook(){char*mystring;_asmmovmystring,ebxprintf("value:%s",mystring);_asm{jmp[0x46AA87]}}如您所见,我正在尝试将EBX处的字符串移动到mystring中,最后跳回0x46AA87,这是位于我的JMPJmpHook下方的几行。printf被调用并且mystring被输出,但所有这些在

windows - MinGW Make 抛出 "The system cannot find the path specified."错误

我正在尝试在Windows7上使用cmake生成一个c++项目。在它实际创建项目之前,尽管看起来cmake对您的工具链进行了快速测试(我正在使用MinGW),这就是我的问题所在。Cmake触发make构建,最终失败并返回“系统找不到指定路径”的响应。我运行了在试运行模式(-n)下失败的特定makefile并手动执行了所有命令:"C:\ProgramFiles(x86)\CMake\bin\cmake.exe"-Ecmake_progress_reportC:\SFML\CMakeFiles\CMakeTmp\CMakeFiles1echoBuildingCobjectCMakeFile

winapi - 用于虚拟内存管理的新 Windows 8.1 API : `DiscardVirtualMemory()` vs `VirtualAlloc()` and `MEM_RESET` and `MEM_RESET_UNDO`

Windows8.1/Server2012RC2刚刚引入了用于虚拟内存管理的新API:OfferVirtualMemory()、ReclaimVirtualMemory()、DiscardVirtualMemory()、它们的用法非常简单,只需查看它们的名称即可。我无法理解这些API如何针对VirtualAlloc()以及标志MEM_RESET和MEM_RESET_UNDO工作,以及什么是细微差别。对于OfferVirtualMemory(),MSDN说它与VirtualAlloc()+MEM_RESET非常相似,只是它从工作集,并限制对页面的进一步访问。所以,基本上它限制了对页面的访

c++ - Windows 驱动内核 : How enumerate all subdirectories and files?

我在一个小型的antirootkit中工作,我需要添加一个功能:删除rootkit目录和您可能的子目录中的所有文件。那么,首先有必要知道所有这些目录和文件,对吧?为此,我下面的代码已经完成了这项任务的一半。他枚举了特定目录的所有目录和文件,但不“查看”子目录(文件和文件夹)。例如:输出:代码:#includetypedefunsignedintUINT;NTSTATUSEnumFilesInDir(){HANDLEhFile=NULL;UNICODE_STRINGszFileName={0};OBJECT_ATTRIBUTESOa={0};NTSTATUSntStatus=0;IO_S

c++ - 为什么相同的 vsnprintf 代码在 Windows (MSVC) 和 Unix (Clang) 上输出不同

在Unix(Clang3.8.1)上,此代码输出:6:328:a8e在Windows(MSVC19.00.24215.1)上,此代码输出:6:123456:a12345e#include#includestaticstd::stringgetFormattedString(constchar*fmt,va_listap){intcount=vsnprintf(NULL,0,fmt,ap)+1;std::cout有趣的是,它们都得到了正确的计数,但在我的Linux和OSX机器上,这段代码输出了错误的结果。这是什么原因造成的?我在某处招致了UB吗? 最佳答案