C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: .vcxprojと.vcprojの変換について


(過去ログ 108 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■64335 / inTopicNo.1)  .vcxprojと.vcprojの変換について
  
□投稿者/ howling (101回)-(2012/11/27(Tue) 12:41:25)

分類:[C++/CLI] 

お世話になっております。

相変わらずVS2010 / Windows7にてC#及びC++の開発を行っております。

さて、前スレッド(http://bbs.wankuma.com/index.cgi?mode=al2&namber=64298)にて、
コンパイラオプションに/CLRを指定してコンパイルを行ったところ、
色々と問題は出たのですが、まだ外せていない内容として、次の2つが残っている状態です。

A.
error LNK2005: __invoke_watson は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
(こっちは内容からして、DLLとlibが混在しているために出ているようなので、別途調査します)

B.
error LNK2019: 未解決の外部シンボル "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) が関数 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::append(unsigned int,char)" (?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z) で参照されました。 C:パス:リンク先lib名.lib(リンク先lib名.obj)

error LNK2019: 未解決の外部シンボル "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) が関数 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::assign(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned int,unsigned int)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z) で参照されました。
C:パス:リンク先lib名.lib(リンク先lib名.obj)


このBの方のエラーについて調べてみたのですが、
全く同じ内容として、以下のURLがヒットしました。

http://stackoverflow.com/questions/2896754/link-error-after-update-from-vs2008-to-vs2010

対処方法として、使用する全てのバージョンをVS2010にするか、
VS2008以前でコンパイルし直すか、頑張って当該部分を書き換えるか、と書かれているような感じです…。(誤訳じゃなければ)
今のところ、プロジェクト自体は全てVS2010でコンパイルしているあたり、
リンクしているライブラリをVS2010でコンパイルし直せれば一番良いのですが、
これはちょっと難しそうです。
そのため、コンパイルしているプロジェクト(vcxproj)をVS2008用の物(vcproj)に変えたらうまくいきそうだと思うのですが、
逆に2008に戻す方法をご存知でしたら、教えて頂けませんか?

以上です。

//CLRオプションをつけると可変引数を持つ関数がマネージコード非対応のため、ネイティブコードになるんですね…。
//まだ動いていませんが、それで正常に動作するか不安です。CLR:pureとかの方がいいんですかねぇ…うーむ。
引用返信 編集キー/
■64336 / inTopicNo.2)  Re[1]: .vcxprojと.vcprojの変換について
□投稿者/ とっちゃん (25回)-(2012/11/27(Tue) 14:19:01)
とっちゃん さんの Web サイト
No64335 (howling さん) に返信
> このBの方のエラーについて調べてみたのですが、
> 全く同じ内容として、以下のURLがヒットしました。
>
> http://stackoverflow.com/questions/2896754/link-error-after-update-from-vs2008-to-vs2010
>
> 対処方法として、使用する全てのバージョンをVS2010にするか、
> VS2008以前でコンパイルし直すか、頑張って当該部分を書き換えるか、と書かれているような感じです…。(誤訳じゃなければ)
> 今のところ、プロジェクト自体は全てVS2010でコンパイルしているあたり、
> リンクしているライブラリをVS2010でコンパイルし直せれば一番良いのですが、
> これはちょっと難しそうです。

えーっと。。。英語を読み切れないなら、自動翻訳を通すなどもしてみてはいかがでしょうか?

VS2010で、プロジェクトのプロパティで、全般のプロパティページの一番下から2番目にある
「プラットフォーム ツールセット」でVC9 を選択すれば、2008でコンパイルしてくれます。
ただし、その環境にVS2008がインストールされている必要がありますが。
#というようなことを、回答部分のやり取りで書いています。。。

これでだめなら、VS2008でプロジェクトを作り直す(vcxproj->vcprojへのコンバートツールはないと思います)ことになると思います。

引用返信 編集キー/
■64337 / inTopicNo.3)  Re[2]: .vcxprojと.vcprojの変換について
□投稿者/ howling (102回)-(2012/11/27(Tue) 15:10:03)
No64336 (とっちゃん さん) に返信

お返事ありがとうございます。

> えーっと。。。英語を読み切れないなら、自動翻訳を通すなどもしてみてはいかがでしょうか?

そうですね…。
ちなみに、おすすめの翻訳ツールってありますか…?
普段使ってないのですが、確かに使った方が良さそうですので…。

> VS2010で、プロジェクトのプロパティで、全般のプロパティページの一番下から2番目にある
> 「プラットフォーム ツールセット」でVC9 を選択すれば、2008でコンパイルしてくれます。
> ただし、その環境にVS2008がインストールされている必要がありますが。
> #というようなことを、回答部分のやり取りで書いています。。。

答えの一部だけ読み取ろうとしてました…すみません。
2008入っていますので、これでXlanとXRanのエラーは消えました。ありがとうございました。
解決済み
引用返信 編集キー/
■64338 / inTopicNo.4)  Re[3]: .vcxprojと.vcprojの変換について
□投稿者/ とっちゃん (26回)-(2012/11/27(Tue) 16:09:30)
とっちゃん さんの Web サイト
No64337 (howling さん) に返信
>>えーっと。。。英語を読み切れないなら、自動翻訳を通すなどもしてみてはいかがでしょうか?
>
> そうですね…。
> ちなみに、おすすめの翻訳ツールってありますか…?
> 普段使ってないのですが、確かに使った方が良さそうですので…。
>
私が普段使ってるのは、IEの翻訳機能ですね。

他にもいろいろありますので、探してみるといいかと。

引用返信 編集キー/
■64339 / inTopicNo.5)  Re[4]: .vcxprojと.vcprojの変換について
□投稿者/ とっちゃん (27回)-(2012/11/27(Tue) 16:10:04)
とっちゃん さんの Web サイト
No64338 (とっちゃん さん) に返信

解決済み付け忘れたので、つけなおし。
解決済み
引用返信 編集キー/
■64443 / inTopicNo.6)  Re[5]: .vcxprojと.vcprojの変換について
□投稿者/ howling (120回)-(2012/12/03(Mon) 19:46:16)
近しい問題だったので、こちらに質問します。

VS2008でコンパイルしたライブラリ(.NET3.5)と、VS2010でコンパイルしたライブラリ(.NET4.0)がありますが、
こちらを、どれが4.0対象で、どれが3.5対象なのか?というのを一目で確認する方法はありますか?

この質問に載せたエラーがまた出てしまったのですが、
どのlibが問題なのかがわからないため、スマートな方法は無いのかなと。

調べてみたのですが、VSのバージョンを確認する項目ばかりで、
libのバージョンが異なる場合について見つかりませんでした。
ツールなどでも構いません、ご存知の方いらっしゃいますか?
引用返信 編集キー/
■64451 / inTopicNo.7)  Re[6]: .vcxprojと.vcprojの変換について
□投稿者/ とっちゃん (31回)-(2012/12/04(Tue) 11:07:30)
とっちゃん さんの Web サイト
No64443 (howling さん) に返信
> 近しい問題だったので、こちらに質問します。
>
> VS2008でコンパイルしたライブラリ(.NET3.5)と、VS2010でコンパイルしたライブラリ(.NET4.0)がありますが、
> こちらを、どれが4.0対象で、どれが3.5対象なのか?というのを一目で確認する方法はありますか?
>
どの .NET Framework を要求しているか?ということでしょうか?
このスレは、C++(エラー情報からおそらくNative)の話題だと思ったのですが?


> この質問に載せたエラーがまた出てしまったのですが、
> どのlibが問題なのかがわからないため、スマートな方法は無いのかなと。
>
.NET Framework のライブラリ(クラスライブラリプロジェクトで作ったDLL)には、LIBファイルはありません。
プロジェクトを参照するあるいは、ファイルを参照することで、C/C++ でいえば、LIBを指定するのと同じ効果が得られるようになっています。

C#のプロジェクトであれば参照設定しているところで街頭のアセンブリ(DLLや、EXEの総称と思っておけばいいです。C/C++風に言えばモジュールが近いものですが、厳密には異なります)のプロパティを見れば、ランタイムバージョンがわかるようになっています。

また、特に参照しているプロジェクトもなくて、どれがどれだか。。。という場合は、
ILDASM(IL 逆アセンブラ)で、マニフェストの詳細(ツリーのMANIFESTをダブルクリックすると出てくる)を見れば、ウィンドウの一番上の行にバージョンが出ます。


> 調べてみたのですが、VSのバージョンを確認する項目ばかりで、
> libのバージョンが異なる場合について見つかりませんでした。
> ツールなどでも構いません、ご存知の方いらっしゃいますか?

で、C/C++ のLIBの場合ですが...
インポートライブラリなら、LIBではなく、実際に利用するDLLの依存関係から調べることになると思います。
スタティックリンクライブラリの場合は、.obj を分解して依存関係を見ないとわからない気がしますが、こちらは調査すらしたことがないのでわかりません。

引用返信 編集キー/
■64452 / inTopicNo.8)  Re[7]: .vcxprojと.vcprojの変換について
□投稿者/ とっちゃん (32回)-(2012/12/04(Tue) 11:10:06)
とっちゃん さんの Web サイト
書き忘れ。

一つのスレで後から、別の質問を追加しても回答がもらえないことが多々あります。
異なる問題の場合は、同じスレにつなげるのではなく、別途新規に質問を立てたほうがより多くの人に参照してもらえる可能性が高くなりますよ。

このスレ、実質終わってるので、私以外反応しない可能性が非常に高いです。

引用返信 編集キー/
■64453 / inTopicNo.9)  Re[8]: .vcxprojと.vcprojの変換について
□投稿者/ howling (121回)-(2012/12/04(Tue) 11:24:02)
No64452 (とっちゃん さん) に返信
> 書き忘れ。
>
> 一つのスレで後から、別の質問を追加しても回答がもらえないことが多々あります。
> 異なる問題の場合は、同じスレにつなげるのではなく、別途新規に質問を立てたほうがより多くの人に参照してもらえる可能性が高くなりますよ。
>
> このスレ、実質終わってるので、私以外反応しない可能性が非常に高いです。
>

なるほど。それでは一度こちらはクローズします。問題も解決してますしね。
問題自体は、Xlen&Xranが出てしまうことでしたので一緒にしたのですが…別スレ立てますね。
解決済み
引用返信 編集キー/
■64455 / inTopicNo.10)  Re[7]: .vcxprojと.vcprojの変換について
□投稿者/ howling (123回)-(2012/12/04(Tue) 11:45:27)
2012/12/04(Tue) 11:45:42 編集(投稿者)

No64451 (とっちゃん さん) に返信

こちらに続けて書いてしまった質問を移動させました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=64454

> .NET Framework のライブラリ(クラスライブラリプロジェクトで作ったDLL)には、LIBファイルはありません。
> プロジェクトを参照するあるいは、ファイルを参照することで、C/C++ でいえば、LIBを指定するのと同じ効果が得られるようになっています。

これは、C#ではよく使っていたので問題無かったのですが、
C++/CLIに触れることが無く、そちらでは今回初めて知りました。
同じ.NETということで、内部的な作りも似ているのかな?と思っていますが、
こちらはゆっくり知る必要がありそうですね。

> C#のプロジェクトであれば参照設定しているところで街頭のアセンブリ(DLLや、EXEの総称と思っておけばいいです。C/C++風に言えばモジュールが近いものですが、厳密には異なります)のプロパティを見れば、ランタイムバージョンがわかるようになっています。

こちらは大丈夫です。ありがとうございます。

> また、特に参照しているプロジェクトもなくて、どれがどれだか。。。という場合は、
> ILDASM(IL 逆アセンブラ)で、マニフェストの詳細(ツリーのMANIFESTをダブルクリックすると出てくる)を見れば、ウィンドウの一番上の行にバージョンが出ます。

ILDASMなんて知らなかった…。DependencyWalkerみたいな物なのでしょうか?(これもこれでまともに使ったことないんですが)
困った時のために、どこかにメモっておきます…。

> で、C/C++ のLIBの場合ですが...
> インポートライブラリなら、LIBではなく、実際に利用するDLLの依存関係から調べることになると思います。
> スタティックリンクライブラリの場合は、.obj を分解して依存関係を見ないとわからない気がしますが、こちらは調査すらしたことがないのでわかりません。

うーん、やっぱり結構大変な作業になるんですね…。
別スレに移したのは良いですが、難しそうなことには変わりないですね。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -