早上好,
我是Windows的新用户(使用Linux 10年),由于某种原因我必须编译一个C ++程序。 我在Windows下debugging的经验并不多,但我很想了解我做错了什么。
我使用MinGW与g ++和不同的库,特别是一个叫做libjpeg的库。
当我使用下面的命令在PowerShell中编译和构build文件时,一切正常,我的C ++代码给了我预期的结果。
g++ -o imageProcessing imageProcessing.cpp -lgdi32 -Dgmic_use_jpeg -I'C:\GnuWin32\include' -L'C:\GnuWin32\lib' -ljpeg
当我在.bat文件中使用完全相同的命令时,或者直接在我的C ++编辑器(geany)中使用时,我有这个错误:
imageProcessing.cpp:6:21: fatal error: jpeglib.h: No such file or directory #include <jpeglib.h> ^ compilation terminated.
它没有findjpeglib.h。
环境variables中设置了正确的path。
我使用的libjpeg允许我在使用CImg库时打开/保存jpeg图片。 在这里能find它:
Jpeg for Windows
这是一个非常简单的例子:
#include <iostream> #include <jpeglib.h> using namespace std; int main() { float number; cout << "Enter a number: "; cin >> number; }
我们称之为test.cpp,它的位置是: C:\Users\Rémi\Documents\Image_Procesing\C++\testCImg
以下是我在环境variablespath中添加的内容: C:\GnuWin32\lib;C:\GnuWin32\bin;C:\MinGW\bin;
这里是我的test.bat: g++ -o test test.cpp -lgdi32 -Dgmic_use_jpeg -I'C:\GnuWin32\include' -L'C:\GnuWin32\lib' -ljpeg
test.bat也位于: C:\Users\Rémi\Documents\Image_Procesing\C++\testCImg
.bat失败如下:
C:\Users\Rémi\Documents\Image_Procesing\C++\testCImg>g++ -o test test.cpp -lgdi32 -Dgmic_use_jpeg -I'C:\GnuWin32\include ' -L'C:\GnuWin32\lib' -ljpeg test.cpp:3:21: fatal error: jpeglib.h: No such file or directory #include <jpeglib.h> ^ compilation terminated.
我昨天一整天都在试图搞清楚,而我受到Windows知识的限制。 如果有人能帮助我,我将非常感激。
谢谢。
在Windows中的参数标记传统上使用"
字符"
我认为单引号被解释为路径名称的一部分,导致“没有这样的文件或目录”错误,这将解释为什么它在PowerShell中,因为单引号在那里是有效的。
看看你是否有更好的运气:
g++ -o imageProcessing imageProcessing.cpp -lgdi32 -Dgmic_use_jpeg -I"C:\GnuWin32\include" -L"C:\GnuWin32\lib" -ljpeg
当你有包含路径问题时,要求GCC告诉你它正在使用什么。
在下面的例子中,你可以清楚地看到它正在搜索一个位置'test'
并忽略它不存在的位置。
然后你可以推断出,正如其他地方所提到的那样,单引号在批处理中是错误的。 在这一点上,你会给"test"
一个去,取得成功。
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\lightness>g++ -E -x c++ - -v -I'test' Using built-in specs. COLLECT_GCC=g++ Target: mingw32 Configured with: ../../src/gcc-4.7.1/configure --build=mingw32 --enable-language s=c,c++,ada,fortran,objc,obj-c++ --enable-threads=win32 --enable-libgomp --enabl e-lto --enable-fully-dynamic-string --enable-libstdcxx-debug --enable-version-sp ecific-runtime-libs --with-gnu-ld --disable-nls --disable-win32-registry --disab le-symvers --disable-build-poststage1-with-cxx --disable-werror --prefix=/mingw3 2tdm --with-local-prefix=/mingw32tdm --enable-cxx-flags='-fno-function-sections -fno-data-sections' --with-pkgversion=tdm-1 --enable-sjlj-exceptions --with-bugu rl=http://tdm-gcc.tdragon.net/bugs Thread model: win32 gcc version 4.7.1 (tdm-1) COLLECT_GCC_OPTIONS='-E' '-v' '-I' ''\''test'\''' '-mtune=i386' '-march=i386' c:/mingw32/bin/../libexec/gcc/mingw32/4.7.1/cc1plus.exe -E -quiet -v -I 'test' -iprefix c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/ - -mtune=i386 -march=i386 ignoring nonexistent directory "c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/../../.. /../mingw32/include" ignoring duplicate directory "c:/mingw32/lib/gcc/../../lib/gcc/mingw32/4.7.1/inc lude/c++" ignoring duplicate directory "c:/mingw32/lib/gcc/../../lib/gcc/mingw32/4.7.1/inc lude/c++/mingw32" ignoring duplicate directory "c:/mingw32/lib/gcc/../../lib/gcc/mingw32/4.7.1/inc lude/c++/backward" ignoring duplicate directory "c:/mingw32/lib/gcc/../../lib/gcc/mingw32/4.7.1/inc lude" ignoring duplicate directory "c:/mingw32/lib/gcc/../../lib/gcc/mingw32/4.7.1/../ ../../../include" ignoring duplicate directory "c:/mingw32/lib/gcc/../../lib/gcc/mingw32/4.7.1/inc lude-fixed" ignoring nonexistent directory "c:/mingw32/lib/gcc/../../lib/gcc/mingw32/4.7.1/. ./../../../mingw32/include" ignoring nonexistent directory "'test'" #include "..." search starts here: #include <...> search starts here: c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/include/c++ c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/include/c++/mingw32 c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/include/c++/backward c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/include c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/../../../../include c:\mingw32\bin\../lib/gcc/mingw32/4.7.1/include-fixed End of search list. # 1 "<stdin>"