我正在尝试在Windows 7(64位)上使用Cmake编译OpenCV.它将与Eclipse和CDT一起使用,我在其中阅读了您无论编译器如何都要指定Unix Makefile的地方.现在,鉴于我也有cygwin(对于Android NDK的东西),我首先尝试使用它的编译器,我成功配置CMake并生成makefile,但只有63%的编译,当OpenCV吐出错误时(关于ffmpeg和HMODULE).所以我切换到MinGW的(用的HelloWorld它也是一种痛苦,我必须指定一个完整路径MinGW的G ++不管PATH变量设置的),但现在我甚至不能配置CMake的.我收到以下错误:
The C compiler identification is GNU
The CXX compiler identification is GNU
CMake Error: your RC compiler: "CMAKE_RC_COMPILER-NOTFOUND" was not found. Please set CMAKE_RC_COMPILER to a valid compiler path or name.
Check for working C compiler: C:/MinGW/bin/gcc.exe
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeRCInformation.cmake:22 (GET_FILENAME_COMPONENT):
get_filename_component called with incorrect number of arguments
Call Stack (most recent call first):
C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-GNU.cmake:59 (enable_language)
C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-GNU-C.cmake:1 (include)
C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeCInformation.cmake:56 (INCLUDE)
CMakeLists.txt:2 (PROJECT) …Run Code Online (Sandbox Code Playgroud) 我似乎忘记了在win32机器上使用makefile作为ac程序时在命令行输入的内容.我记得的是我应该输入类似的东西
mingw32 -make
.但这不是atm.香港专业教育学院做了所有必要的事情,如设置环境mingw变量.对命令有什么帮助?
我想知道是否有任何C++专家可以对这种奇怪的情况有所了解.Box2D物理引擎附带的一个示例是消息"称为纯虚方法",但仅限于某个编译器(并且仅在发布版本中).
您可能知道Box2D是一个非常可靠的代码块,所以我认为这可能是编译器的问题,特别是考虑到它只发生在这个特定的编译器上.我在Windows7上使用mingw32:
> gcc.exe --version
gcc version 4.4.0 (GCC)
Run Code Online (Sandbox Code Playgroud)
以下是Box2D相关部分的简要摘录.您可以在以下网址查看完整资料来源:
b2Shape.h
b2CircleShape.h
b2CircleShape.cpp
SensorTest.h
//base class
class b2Shape
{
public:
virtual ~b2Shape() {}
virtual b2Shape* Clone(b2BlockAllocator* allocator) const = 0;
};
//sub class
class b2CircleShape : public b2Shape
{
public:
b2CircleShape();
b2Shape* Clone(b2BlockAllocator* allocator) const;
};
inline b2CircleShape::b2CircleShape() {}
b2Shape* b2CircleShape::Clone(b2BlockAllocator* allocator) const
{
void* mem = allocator->Allocate(sizeof(b2CircleShape));
b2CircleShape* clone = new (mem) b2CircleShape;
*clone = *this;
return clone;
}
Run Code Online (Sandbox Code Playgroud)
请注意克隆功能中的新位置.
现在导致问题的执行归结为:
{
b2CircleShape shape;
shape.Clone(allocator); //ok
}
{
b2CircleShape …Run Code Online (Sandbox Code Playgroud) 我写过最小的测试问题:
#include <sys/types.h>
int main(int argc, char** argv) {
off_t l = 0;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下作品: g++ test.cpp
但如果我尝试使用c ++ 11进行编译,我会得到:
c:\ test> g ++ -std = c ++ 11 test.cpp
test.cpp: In function 'int main(int, char**)':
test.cpp:5:2: error: 'off_t' was not declared in this scope
test.cpp:5:8: error: expected ';' before 'l'
test.cpp:6:9: error: 'l' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会这样?这困扰我的原因是我试图在我的c ++ 11代码中使用zlib库.库zlib.h使用off_t很多.
我的编译器版本是:gcc 4.7.2
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.7.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 …Run Code Online (Sandbox Code Playgroud) 我与GNU自动工具(特别是libtool)有困难的关系。但是因为涉及到可移植性和交叉编译,所以他们会大吃一惊,所以我再次开始使用它们。
不幸的是,我无法使用libtool构建正确的Windows DLL。但是使用vanilla make gcc可以为我愉快地构建DLL。
例如:
LIBEXT = .dll
pkzo$(LIBEXT): $(patsubst %.cpp, %.o, $(pkzo_SOURCES)) resources.o
$(CXX) -shared -fPIC $(CXXFLAGS) $^ $(LDFLAGS) -Wl,--out-implib=libpkzo.lib -o $@
Run Code Online (Sandbox Code Playgroud)
将建立一个DLL并导入库。(即使没有任何烦人的decelspec)。
但是,如果我像这样使用libtool:
lib_LTLIBRARIES = libpkzo.la
libpkzo_la_CXXFALGS = ...
libpkzo_la_LDADD = ...
libpkzo_la_SOURCES = ...
Run Code Online (Sandbox Code Playgroud)
Libtool抱怨:
*** Warning: linker path does not have real file for library -lSDL2main.
*** I have the capability to make that library automatically link in when
*** you link to this library. But I can only do this if you have a …Run Code Online (Sandbox Code Playgroud) 我正在使用CMake和MinGW32在C++中做小项目,这需要libcurl库,但是当我尝试静态链接构建libcurl.a时,我得到了未定义的引用错误
Run Code Online (Sandbox Code Playgroud)undefined reference to `_imp__curl_easy_init' undefined reference to `_imp__curl_easy_setopt' undefined reference to `_imp__curl_easy_perform' undefined reference to `_imp__curl_easy_getinfo' undefined reference to `_imp__curl_easy_strerror'
我在dep/curl中有cURL源代码,在src文件夹中有源代码.这就是我的项目的CMakeLists.txt的样子:
project(ShutdownServer)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_BUILD_TYPE "Release")
set(CURL_STATICLIB true)
set(BUILD_CURL_EXE false)
add_subdirectory(dep/curl)
set(TARGET_NAME "ShutdownServer")
set(LIBCURL_DIR ${PROJECT_SOURCE_DIR}/dep/curl)
aux_source_directory(src SRC_LIST)
add_executable(${TARGET_NAME} ${SRC_LIST})
find_path(LIBCURL_INCLUDE_DIR curl/curl.h HINTS ${LIBCURL_DIR}/include)
include_directories(${LIBCURL_INCLUDE_DIR})
add_dependencies(${TARGET_NAME} libcurl)
set(LIBS ${LIBS} ws2_32)
set(LIBS ${LIBS} iphlpapi)
set(LIBS ${LIBS} libcurl)
target_link_libraries(${TARGET_NAME} ${LIBS})
set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc -static-libstdc++")
Run Code Online (Sandbox Code Playgroud)
当我将CURL_STATICLIB选项切换为false并动态生成libcurl时,项目构建正常,但我宁愿将所有内容构建到一个二进制文件中.有人可以告诉我这有什么问题吗?
运行或调试任何东西给我一个非常令人沮丧的"启动失败.找不到二进制"错误.我正在使用安装了CDT插件的Eclipse(具体来说,我安装了MinGW软件包).
我已经尝试将用户和系统PATH变量都设置为包含my(MinGW目录)/ bin
我还尝试在运行之前构建程序.
我还确保启用了项目设置下的PE Windows Parser.
我去了Project Properties> Run/Debug Settings> New> C/C++ Application> Environment> Select>,然后我选择了Path
我还尝试将主选项卡中的C/C++应用程序设置为通过构建程序生成的可执行文件,但是在构建程序时没有生成这样的文件.不过,我严重怀疑这是导致问题的原因.
我的选项用完了,问题仍然存在.还有什么需要做的?我究竟做错了什么?
当我查看MinGW的安装说明时,本教程将mingw基本软件包引用为安装MinGW后要安装的软件包.但是mingw base不适合我.相反,我看到mingw32基地.可能是64位程序Eclipse试图运行32位代码吗?那是怎么回事?如果这是问题,我该如何解决?
我在PC(mingw32,32bit arch)上模拟来自嵌入式系统(stm32,KeilμVision5,MDK-ARM)的代码.ARM编译器的对齐方式与我的桌面mingw构建不匹配:
// ARM Code (ARM compiler uses __packed)
typedef __packed struct _file
{
uint8_t var1;
uint16_t var2;
} FILE;
// PC mingw gcc code trying to emulate layout above.
typedef struct __attribute__((packed, aligned(1))) _file
{
uint8_t var1;
uint16_t var2;
} FILE;
Run Code Online (Sandbox Code Playgroud)
在源代码中,我执行以下操作:file.var1 = 0x22; file.var2 = 0xAA55;然后将其写入内存.当我读取它显示的嵌入式系统上的内存时0x22, 0x55, 0xAA.在Windows机器上读取0x22, 0xFF, 0x55, 0xAA,与在2填充第二个字节.我该如何纠正这种行为?
目前,我尝试编译我的haskell库,它以前是在arch linux上编译的.共享库),到windows dll库.我已经读过,该cabal不支持将haskell dll库打包开箱.根据https://downloads.haskell.org/~ghc/7.0.3/docs/html/users_guide/win32-dlls.html我已经编译了这样一个库到dll(编译工程).
ghc -shared -o libLogic.dll dist/build/HSlogic_KA1QeY80keFKgyu69OtwOE.o \
/c/ghc/ghc-7.10.1/lib/conta_47ajk3tbda43DFWyeF3oHQ/HScontainers-0.5.6.2-47ajk3tbda43DFWyeF3oHQ.o \
.cabal-sandbox/i386-windows-ghc-7.10.1/Missi_1lZqat04J1yLHrfGdhK9Qx/libHSMissingH-1.3.0.1-A2UVxmrfU \
xWGZUHs3Vx4et.a .cabal-sandbox/i386-windows-ghc-7.10.1/text_8rMotiVS8ISBkxP7UzusGU/HStext-1.2.1.1-1L7lZlUz0bO8ROU5DNNfWq.o \
.cabal-sandb ox/i386-windows-ghc-7.10.1/regex_1WudNAZWYEMJ7hjTqevDzK/HSregex-base-0.93.2-CsRFAGo3Jfi7vN1y74K9DT.o \
.cabal-sandbox/i386-windows-ghc-7.10.1/regex_4EmnRBpiUiN81uA3rzCqhM/HSregex-compat-0.95.1-DsaThvjcDpRGceYPQ2iyOg.o \
.cabal-sandbox/i386-windows-ghc-7.10.1/regex_FcyoJ8fpGysAR4JUIv3Onx/HSregex-posix-0.95.2-HrKRtQubtek4GEuR7lgLlg.o /c/ghc/ghc-7.10.1/lib/bytes_6vj5EoliHgNHISHCVCb069/HSbytestring-0.10.6.0-6vj5EoliHgNHISHCVCb069.o \
/c/ghc/ghc-7.10.1/lib/deeps_FpR4obOZALU1lutWnrBldi/HSdeepseq-1.4.1.1-FpR4obOZALU1lutWnrBldi.o \
/c/ghc/ghc-7.10.1/ lib/binar_EKE3c9Lmxb3DQpU0fPtru6/HSbinary-0.7.3.0-EKE3c9Lmxb3DQpU0fPtru6.o \
/c/ghc/ghc-7.10.1/lib/array_FaHmcBFfuRM8kmZLEY8D5S/HSarray-0.5.1.0-FaHmcBFfuRM8kmZLEY8D5S.o \
.cabal-sandbox/i386-windows-ghc-7.10.1/split_EzXNp9Mcx6zDnUvRChe0Sw/HSsplit-0.2.2-EcQml2WFBePDKSCjwazauo.o
Run Code Online (Sandbox Code Playgroud)
这个dll库后来用于链接程序(qt项目)
win32:LIBS += -L../lcng-gui -lLogic ../lcng-gui/libLogic.dll.a
Run Code Online (Sandbox Code Playgroud)
qt编译也成功了,但是当我尝试运行程序时 - 它在strlen/_mingw_pformat中的段错误.
我有什么错误,我该怎么做才能成功创建haskell dll库,可以在任何与之链接的程序中使用?
library - 包含Main模块的.hs或.lhs文件.ghc-options:-O3 -fwarn-unused-imports扩展:CPP
-- Modules included in this executable, other than Main.
-- other-modules:
-- LANGUAGE extensions used by modules in this package.
-- other-extensions:
-- Other library packages from which modules are …Run Code Online (Sandbox Code Playgroud)