CALENDAR
S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>
閲覧数の多い順
<< すいすいクロール! | main | 小松 (2) >>
スポンサーサイト

一定期間更新がないため広告を表示しています

| - | | - | - | 編集 |
Visual Studio 2005 コマンドプロンプトを使って、cl でビルドが失敗する
Cの勉強をしてみようとVisual C++ 2005 Express Editionを入れて、Visual Studio 2005 コマンド プロンプト からclでネイティブCプログラムをビルトしたがエラーになってしまう。他のパソコンに入れてあるLinuxのgccではコンパイルして実行できるのでソースのミスではないと思う。

解決するために試した事を順に書いた。
  1. 表示されたエラー
    LINK : fatal error LNK1104: ファイル 'C:¥DOCUME~1¥foo¥Local' を開くことができません。

    Local Settings の間のスペースで途切れているので、これは環境変数かもしれないと思い環境変数を見た。

    fooのユーザ環境変数
    TEMP
    %USERPROFILE%¥Local Settings¥Temp
    TMP
    %USERPROFILE%¥Local Settings¥Temp

    システム環境変数
    TEMP
    %SystemRoot%¥TEMP
    TMP
    %SystemRoot%¥TEMP

  2. 環境変数の見直し。試しにユーザ環境変数を""でくくってみた。
    TEMP
    "%USERPROFILE%¥Local Settings¥Temp"
    TMP
    "%USERPROFILE%¥Local Settings¥Temp"

    エラーになったが、さっきと表示されるエラーが変わっている。やはり環境変数に原因があったみたいだ。
    C:¥Program Files¥Microsoft Visual Studio 8¥VC>cl /EHsc simple.cpp
    Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
    Copyright (C) Microsoft Corporation. All rights reserved.

    simple.cpp
    c1xx : fatal error C1083: コンパイラの中間生成物 ファイルを開けません。'"C:¥Documents and Settings¥foo¥Local Settings¥Temp"¥_CL_3c33f81eex': Invalid argument

    C:¥Program Files¥Microsoft Visual Studio 8¥VC>

  3. コマンドプロンプトから定義されている環境変数の表示
    >set

    TEMP="C:¥Documents and Settings¥foo¥Local Settings¥Temp"
    TMP="C:¥Documents and Settings¥foo¥Local Settings¥Temp"


    ユーザ環境変数を元にもどす。

  4. コマンドプロンプトを cmd ではなく Visual Studio 2005 コマンド プロンプト のように分けてあるからどこかに最初に読み込むファイルがあるかもしれないと思い探すことにした。
    そこにシステム環境変数をエイリアスに定義すれば、ユーザ環境変数もシステム環境変数も変更しないでうまくいきそうだと思った。

    設定ファイルを順に追っていった。
    まず、スタートメニューから、
    Visual Studio 2005 コマンド プロンプト
    %comspec% /k ""C:¥Program Files¥Microsoft Visual Studio 8¥VC¥vcvarsall.bat"" x86

    そして、vcvarsall.bat を見る。
    :x86
    if not exist "%~dp0bin¥vcvars32.bat" goto missing
    call "%~dp0bin¥vcvars32.bat"
    goto :eof

    次に、
    VC¥bin フォルダの中にある vcvars32.bat の中を見る。
    "%VS80COMNTOOLS%vsvars32.bat"

    Common7¥Tools フォルダを開くと、vsvars32.bat があるので中を見ると
    なんとなく @set というコマンドで、エイリアスの定義をしているっぽいので追加した。

    @set TEMP=%SystemRoot%¥TEMP
    @set TMP=%SystemRoot%¥TEMP

  5. C:¥Program Files¥Microsoft Visual Studio 8¥Common7¥Tools¥vsvars32.bat の編集

    @set TEMP=%SystemRoot%¥TEMP
    @set TMP=%SystemRoot%¥TEMP
    を追加


    正常にコンパイルしてビルドできた。
    >cl sample01.c

    /out:sample01.exe
    sample01.obj

  6. ビルドしたプログラムも正常に実行できた。
    C:¥Program Files¥Microsoft Visual Studio 8¥VC>simple.exe
    This is a native C++ program.

    C:¥Program Files¥Microsoft Visual Studio 8¥VC>sample01.exe
    210



■他に思いついた解決法。

TEMP=C:¥Documents and Settings¥foo¥Local Settings¥Temp
ファイル 'C:¥DOCUME~1¥foo¥Local' を開くことができません。

Local Settings の空白でエラーになっているっぽいので、
ユーザのホームディレクトリにTempフォルダを作り、システムのプロパティより
ユーザ環境変数を変更する。
TMP
%USERPROFILE%¥Temp

これはコンパイルでけた!!!

けど他のアプリケーションとの兼ね合いもあるので、ユーザ環境変数は元に戻してエイリアスを設定にする。
ユーザ環境変数
%USERPROFILE%¥Local Settings¥Temp

エイリアスの定義
Common7¥Tools¥vsvars32.bat
---------
@set TEMP=%USERPROFILE%¥Temp
@set TMP=%USERPROFILE%¥Temp
---------

LINK : fatal error LNK1104: ファイル 'C:¥Documents' を開くことができません。

やっぱりこれもダメでした。

■もうひとつ思いついた解決法。
ユーザ環境変数のTEMP、TMP の値を
%USERPROFILE%¥Local Settings¥Temp
から
%USERPROFILE%¥"Local Settings"¥Temp
に変更する。

sample01.c
c1 : fatal error C1083: コンパイラの中間生成物 ファイルを開けません。'C:¥Documen
ts and Settings¥foo¥"Local Settings"¥Temp¥_CL_76bfac28ex': Invalid argument

これは、ダメでした。
| windows | 00:30 | comments(1) | trackbacks(0) | 編集 |
スポンサーサイト
| - | 00:30 | - | - | 編集 |
コメント
上の通りやったら、clが操作可能なプログラムじゃないとかって言ってるんですけど、どうすればいよいのでしょうか・・・。前より悪くなってしまった・・・。
| sato | 2008/02/22 8:27 PM |
コメントする









この記事のトラックバックURL
http://cafelate.jugem.cc/trackback/85
トラックバック