外部シンボル"_errno"は未解決です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
channtaku

外部シンボル"_errno"は未解決です

#1

投稿記事 by channtaku » 11年前

C言語を用いてプログラムを書いています。
コンパイラはvisual studio2010を用いていて、そのときは問題なくコンパイルできていました。
ところが、visual studioを2012にアップロードすると、
未解決の外部シンボル__report_rangecheckfailureが~で参照されました
というエラーがでました。そのとき、ライブラリファイルとして、user32.lib、gc.lib、libcd.libをリンクしていたのですが、
いろいろ調べていたところ__report_rangecheckfailureはmsvcrtd.libの中にあるとわかったので、上記のライブラリファイルに加えて
msvcrt.libをリンクに追加しました。
すると、

msvcrt.lib(gs_cookie.obj) : error LNK2005: ___security_cookie は既に libcd.lib(s
eccook.obj) で定義されています。

というエラーがでました。
なので、libcd.libを/nodefaultlibを用いて参照しないようにすると

gc.lib(malloc.obj) : error LNK2001: 外部シンボル "_errno" は未解決です。

というエラーがでました。
おそらくライブラリファイルの呼び出しの部分でうまくいっていないと思うのですがなかなか本質的な解決にはいたっていません。
なにか解決法があればご教授願いたいと思います。

ちなみにC言語については初心者レベルです。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 外部シンボル"_errno"は未解決です

#2

投稿記事 by みけCAT » 11年前

過去ログです。
LNK2019:未解決の外部シンボル__report_rangecheckfailure • C言語交流フォーラム ~ mixC++ ~

「Project → Upgrade VC++ projects…」というメニューでプロジェクトをVS2012のものにアップグレードするといいらしいです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

Re: 外部シンボル"_errno"は未解決です

#3

投稿記事 by naohiro19 » 11年前

リビルドを実行するとうまくいくかもしれません。

channtaku

Re: 外部シンボル"_errno"は未解決です

#4

投稿記事 by channtaku » 11年前

「Project → Upgrade VC++ projects…」というメニューでプロジェクトをVS2012のものにアップグレードするといいらしいです。[/quote]

プロジェクト等は使ってないんですけどね・・・
visual studioのコマンドプロンプトでコンパイルをしているだけで・・・

私自身の理解が浅いだけかもしれませんが。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 外部シンボル"_errno"は未解決です

#5

投稿記事 by みけCAT » 11年前

では/GS-オプションを試してみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

channtaku

Re: 外部シンボル"_errno"は未解決です

#6

投稿記事 by channtaku » 11年前

みけCAT さんが書きました:では/GS-オプションを試してみてください。
それも考えて、いろいろ試してみたのですがなかなかうまくいきません。
いろいろ調べていたところ
「異なるバージョンのコンパイラで作ったライブラリをリンクさせようとすると、コンパイラが勝手にコードを埋め込む」
というのを見て、おそらくこれと同じようなことが起こっているのでは?と思うのですが・・・

オフにするとは具体的にどうするかおわかりでしょうか?
プロジェクト→プロパティ→C/C++→コード生成→セキュリティチェックといってオフにすることはできるのはわかるのですが、
プロジェクトを使っているわけじゃないので、この操作もできないのです・・・

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: 外部シンボル"_errno"は未解決です

#7

投稿記事 by へにっくす » 11年前

channtaku さんが書きました:オフにするとは具体的にどうするかおわかりでしょうか?
プロジェクト→プロパティ→C/C++→コード生成→セキュリティチェックといってオフにすることはできるのはわかるのですが、
プロジェクトを使っているわけじゃないので、この操作もできないのです・・・
コマンドラインを使ってビルドしてるのではないのですか。
してるのであれば、そのコマンドラインの内容を示さないと、具体的な指摘はできないと思いますよ。
単純に
cl <ファイル名>.c user.lib gc.lib libcd.lib
とかしてるだけ?
written by へにっくす

channtaku

Re: 外部シンボル"_errno"は未解決です

#8

投稿記事 by channtaku » 11年前

バッチファイルを用いて順次実行していくプログラムにしています。
エラーが出ているバッチファイルの中身は以下のとおりです。

cd 4_MP
cl /c Feeddown_v2.c
link /nodefaultlib:libcmt /nodefaultlib:libc /nodefaultlib:libcd Feeddown_v2.obj sub_files/split.obj sub_files/user32.lib sub_files/gc.lib sub_files/msvcrtd.lib
Feeddown_v2.exe
cd ..

4_MPのフォルダにFeeddown_v2.cが、4_MP\sub_filesにライブラリファイル等が入っています。
今は、gc.libのところで外部シンボル"_errno"は未解決ですというエラーが出ています。
3行目のライブラリファイルをいろいろいじっているのですが、なかなかうまくいきません・・・

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: 外部シンボル"_errno"は未解決です

#9

投稿記事 by へにっくす » 11年前

まだ足りないですね。
コマンドプロンプトで、環境変数を知るために、setを実行した結果を貼ってください。
ちなみに、みけCATさんが書いた、/GS-というのは、clのオプションです。
セキュリティチェックをオフにするという意味です。
オプションの説明などは、単純にcl /?を実行すると出てきますよ。
written by へにっくす

channtaku

Re: 外部シンボル"_errno"は未解決です

#10

投稿記事 by channtaku » 11年前

cd 4_MP
cl /c Feeddown_v2.c
link /nodefaultlib:libcmt /nodefaultlib:libc Feeddown_v2.obj sub_files/split.obj sub_files/user32.lib sub_files/gc.lib sub_files/libcd.lib
Feeddown_v2.exe
cd ..

の2行目をcl /GS- /c Feeddown_v2.cとすることで解決できました!
ヘニックスさん、みけCHATさん、本当にありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る