系統環境變數Path中路徑多了空格而浪費掉了兩小時

2021-10-24 05:24:58 字數 2220 閱讀 4709

目錄

問題**

問題分析過程及解決 總結

乙個32位工程,根據需求,需要換成64位平台,對應地,其所依賴的庫也需要安裝64位的。

這個表明程式是成功編譯的,只是執行時出現錯誤,一般是執行時鏈結到了與exe位數不同的dll。

比如,64位的程式,執行時卻鏈結到32位的dll,或者32位的程式,執行時鏈結到了64位的dll。

於是,我對用到的庫仔細排查:

(1)pcl庫,環境變數中已新增64位pcl及第三方庫的bin路徑;

(2)qt庫,環境變數中也新增了64位qt庫;

(3)gridmap庫,為靜態庫,自然不用管。

第乙個方法,安裝directx9,雖然覺得應該沒用,但還是安裝了,果然沒用。

第二個方法,排查msvc相關dll,搜尋msvcp140.dll,其在system32資料夾中,並確認為64位,然後再找到安裝vs2015帶的這幾個64位dll,直接複製到exe路徑下,執行依然出錯:

至此,實在無招了。

於是再檢視vs輸出資訊 :

有兩個可疑的資訊:

(1)我的工程明明是x64,exe後面為什麼顯示win32?

(2)我的64位pcl明明安裝在 c:\program files 下,為什麼會鏈結c:\program files (x86)的dll?

第乙個問題,我檢測了下,生成的exe確實是64位的,並且,新建了乙個64位qt工程,輸出資訊後面也是帶win32,雖然不知道為什麼,但應該不是這個導致出錯。

第二個問題,首先檢查vs環境配置是否存在問題,檢視後沒有問題。然後,為了印證是否確實鏈結到c:\program files (x86)下32位的pcl庫,我將c:\program files (x86)的pcl 1.8.1資料夾改為pcl 1.8.10,再次執行,讓我大喜:

這就表明,這個64位exe,執行時確實鏈結的是32位的pcl庫,並且,64位的直接沒有找到,而且,這個dll是存在我加在環境變數中的乙個路徑下的。

這就很明顯了,還是環境變數的問題。

於是,我有檢查了一下環境變數,那幾個路徑都新增了,不會有問題啊,然後,我又想起是怎麼新增這幾個路徑的:

很早之前,第一次安裝pcl時,我在有道雲筆記中記錄了安裝過程,並且對新增的東西有了一些總結,這次安裝pcl,依然是找到當時記錄的文件,安裝成功後,直接將當時記錄的要新增到環境變數中的路徑進行修改,當時安裝的是32位的,在c:\program files (x86)路徑下,要新增的幾個路徑如下:

而我這次安裝的64位,是在c:\program files下,這樣只需要將這幾個路徑的(x86)刪除,然後直接複製到環境變數path中就可以了。

對,就是這麼幹的。

然後,根據剛才的排錯,pcl_common_release.dll沒有找到,但它實實在在就在c:\program files\pcl 1.8.1\bin路徑下,並且,這個路徑實實在在新增到path環境變數中了。這可真是邪門哈。

好像這個路徑結尾並沒有對齊,但開頭卻是對齊的,於是挨個字母對照了一下,也完全一樣,再細看,終於找到問題所在,files與反斜槓之間竟然多了乙個空格...

終於明白了,program files (x86)資料夾,files與後面的括號是有空格的,我刪除(x86)的時候,沒有將空格刪除...前兩個路徑有空格,後面三個路徑沒有空格,還是太粗心了。

這個小小的空格真的是很隱蔽,不過所幸,從遇到錯誤,到找到錯誤,應該是不到兩個小時吧。

這個錯誤的本質原因還是exe鏈結到了與自己本身位數不同的dll。

Linux系統修改環境變數PATH路徑

關於path的作用 path說簡單點就是乙個字串變數,當輸入命令的時候linux會去查詢path裡面記錄的路徑。比如在 根目錄 下可以輸入命令ls,在 usr目錄下也可以輸入ls,但其實ls這個命令根本不在這個兩個目錄下,事實上當你輸入命令的時候linux會去 bin,usr bin,sbin等目錄...

Linux系統下修改環境變數PATH路徑的方法

比如要把 etc apache bin目錄新增到path中,方法有三 1.path path etc apache bin 使用這種方法,只對當前會話有效,也就是說每當登出或登出系統以後,path 設定就會失效 2.vi etc profile 在適當位置新增 path path etc apach...

PATH環境變數

path的值是一系列目錄,當您執行乙個程式時,linux在這些目錄下進行搜尋。用以下命令可以看到path的值。echo path 例如,在主機中,使用者yogin的path值為 opt kde bin usr local bin bin usr bin usr x11r6 bin home yogi...