在Windows中使用g++构建C++文件,但不能作为.bat使用



早上好,

我是Windows的新用户(使用Linux 10年以上),出于某种原因,我不得不编译一个C++程序。我没有在Windows中调试的丰富经验,但我渴望了解我做错了什么。

我将MinGW与g++和不同的库一起使用,特别是一个名为libjpeg的库。

当我编译&使用以下命令在PowerShell中构建文件,一切都很好,我的C++代码给出了预期的结果。

g++ -o imageProcessing imageProcessing.cpp -lgdi32 -Dgmic_use_jpeg -I'C:GnuWin32include' -L'C:GnuWin32lib' -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图片。可以在这里找到:

用于Windows 的Jpeg

这里有一个非常简单的例子:

#include <iostream>
#include <jpeglib.h>
using namespace std;
int main() {
    float number;
    cout << "Enter a number: "; 
    cin  >> number;
}

让我们称之为test.cpp,它的位置是:C:UsersRémiDocumentsImage_ProcesingC++testCImg

以下是我在环境变量路径中添加的内容:C:GnuWin32lib;C:GnuWin32bin;C:MinGWbin;

这是我的测试。bat:g++ -o test test.cpp -lgdi32 -Dgmic_use_jpeg -I'C:GnuWin32include' -L'C:GnuWin32lib' -ljpeg

test.bat也位于:C:UsersRémiDocumentsImage_ProcesingC++testCImg

.bat失败如下:

C:UsersRémiDocumentsImage_ProcesingC++testCImg>g++ -o test test.cpp -lgdi32 -Dgmic_use_jpeg -I'C:GnuWin32include
' -L'C:GnuWin32lib' -ljpeg
test.cpp:3:21: fatal error: jpeglib.h: No such file or directory
 #include <jpeglib.h>
                     ^
compilation terminated.

昨天我花了一整天的时间试图弄清楚,但我对Windows的了解有限。如果有人能帮助我,我将不胜感激。

谢谢。

当您遇到包含路径问题时,请GCC告诉您它在使用什么。

在下面的示例中,您可以清楚地看到它正在搜索一个位置'test',但由于不存在而忽略它。

然后,您可以推断出,正如其他地方提到的,Batch中的单引号是错误的。在这一点上,你会尝试"test"并取得成功。

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
C:Userslightness>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:mingw32bin../lib/gcc/mingw32/4.7.1/ - -mtune=i386 -march=i386
ignoring nonexistent directory "c:mingw32bin../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:mingw32bin../lib/gcc/mingw32/4.7.1/include/c++
 c:mingw32bin../lib/gcc/mingw32/4.7.1/include/c++/mingw32
 c:mingw32bin../lib/gcc/mingw32/4.7.1/include/c++/backward
 c:mingw32bin../lib/gcc/mingw32/4.7.1/include
 c:mingw32bin../lib/gcc/mingw32/4.7.1/../../../../include
 c:mingw32bin../lib/gcc/mingw32/4.7.1/include-fixed
End of search list.
# 1 "<stdin>"

Windows中的参数标记传统上使用"字符。我认为单引号被解释为路径名的一部分,导致"没有这样的文件或目录"错误。这可以解释为什么它在PowerShell中有效,因为单引号在PowerShell中是有效的。

看看你是否有更好的运气:

g++ -o imageProcessing imageProcessing.cpp -lgdi32 -Dgmic_use_jpeg -I"C:GnuWin32include" -L"C:GnuWin32lib" -ljpeg

相关内容

最新更新