早上好,
我是Windows的新用户(使用Linux + 10年),出于某种原因我必须编译C ++程序。我在Windows中没有很好的调试经验,但我很想知道我做错了什么。
我使用MinGW和g ++以及不同的库,特别是一个名为libjpeg的文件。
当我编译&使用以下命令在PowerShell中构建文件,一切正常,我的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.
它找不到jpeglib.h。
在环境变量中设置了正确的路径。
我使用的libjpeg允许我在使用CImg库时打开/保存jpeg图片。它可以在这里找到:
这是一个非常简单的例子:
#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
以下是我在环境变量路径中添加的内容: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知识的限制。 如果有人可以帮助我,我会非常感激。
谢谢。
答案 0 :(得分:2)
如果包含路径问题,请让GCC告诉您它的用途。
在下面的示例中,您可以清楚地看到它正在搜索位置'test'
并忽略它不存在。
然后,您可以推断出,如其他地方所述,Batch中的单引号是错误的。那时你会给"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>"
答案 1 :(得分:1)
Windows中的参数标记传统上使用"
字符。我认为单引号被解释为路径名的一部分,导致“没有这样的文件或目录”错误。这可以解释为什么它在PowerShell中工作,因为单引号在那里是有效的。
看看你是否有更好的运气:
g++ -o imageProcessing imageProcessing.cpp -lgdi32 -Dgmic_use_jpeg -I"C:\GnuWin32\include" -L"C:\GnuWin32\lib" -ljpeg