簡體   English   中英

在Windows中使用g ++構建C ++文件不能用作.bat

[英]Building C++ file with g++ in Windows not working as .bat

早上好,

我是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圖片。 在這里能找到它:

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

這是我在環境變量路徑中添加的內容: 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知識的限制。 如果有人可以幫助我,我會非常感激。

謝謝。

當您包含路徑問題時,請讓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>"

Windows中的參數標記傳統上使用"字符。我認為單引號被解釋為路徑名稱的一部分,導致”沒有這樣的文件或目錄“錯誤。這可以解釋為什么它在PowerShell中工作,但是,因為單引號在那里是有效的。

看看你運氣好嗎:

g++ -o imageProcessing imageProcessing.cpp -lgdi32 -Dgmic_use_jpeg -I"C:\GnuWin32\include" -L"C:\GnuWin32\lib" -ljpeg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM