C/C++の.libについて教えてください

このQ&Aのポイント
  • C/C++の.libについて教えてください。
  • C/C++のライブラリファイルについて教えてください。
  • LibAでother()関数を利用するための方法やLibA側にother()関数を埋め込む方法について教えてください。
回答を見る
  • ベストアンサー

C/C++の.libについて教えてください。

こんにちは。 C/C++のライブラリファイルについて教えてください。 現在VisualStudio2008 AcademicEditionでライブラリを制作しているのですが質問させてください。 ライブラリを制作するプロジェクトをLibA、そのライブラリを利用して実行ファイルを制作するプロジェクトをProjとします。 LibAでother()関数を利用するのに #pragma comment ( lib, "other.lib" )とソースコード上に記述しました。 (other.libは他のプロジェクトで自作したスタティックライブラリでLibAと同じフォルダに入っていると仮定します) ProjでLibAで制作したライブラリを使用するために#pragma comment ( lib, "LibA.lib" )とソースコード上に記述しました。 しかし、other.libが開けませんと怒られてしまいます。 other.libを利用しているのはLibAなのでProj側でother.libを読み込むように強制されるのは面倒臭いのですが、LibA側にother()関数を埋め込むようなことはできないのでしょうか? LibAを利用するProjでもother.libを要求されないようにするにはどうすればいいでしょうか? /* スタティックライブラリを作成するためにLibAをコンパイルする時に#pragma comment ( lib, "other.lib" )の記述が不要というのは知っています。 LibAにその記述を行わなかった場合Projで自分で記述する必要があることも知っています。 */ 現在、私が思いついているのはother.libを作成するプロジェクトのソースコードを引っ張ってきてLibAに入れて一緒にコンパイルするくらいです。 日本語がへたくそでわかりづらいところがあるかとは思いますがよろしくお願いします。

  • 0xEF
  • お礼率59% (193/327)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.8

ダウンロードして D:\Test\lib\lib_a D:\Test\lib\lib_b D:\Test\lib\proj の構成で試してみました。 (1) lib_b の「追加の依存関係」に $(InputDir)\lib_a.lib と設定されていましたが、 lib_a.lib は D:\Test\lib\lib_a\Debug D:\Test\lib\lib_a\Release に作成されたので、lib_a.lib を D:\Test\lib\lib_b にコピーしました。 (2) また、「$(InputDir)\lib_a.lib」だと、 1>------ ビルド開始: プロジェクト: lib_b, 構成: Debug Win32 ------ 1>ライブラリを作成しています... 1>LINK : fatal error LNK1181: 入力ファイル 'd:\Test\lib\lib_b\\lib_a.lib' を開けません。 1>ビルドログは "file://d:\Test\lib\lib_b\Debug\BuildLog.htm" に保存されました。 1>lib_b - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== となるので、 $(InputDir)\lib_a.lib ↓ $(InputDir)lib_a.lib に修正しました。 (3) lib_a も lib_b もソースファイルが main.cpp なので、重複しないように lib_b の main.cpp を mainb.cpp に変更しました。 (4) Proj はそのまま ビルドしようとすると、 1>------ ビルド開始: プロジェクト: proj, 構成: Debug Win32 ------ 1>コンパイルしています... 1>main.cpp 1>マニフェストをリソースにコンパイルしています... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>リンクしています... 1>LINK : fatal error LNK1104: ファイル 'lib_b.lib' を開くことができません。 1>ビルドログは "file://d:\Test\lib\proj\Debug\BuildLog.htm" に保存されました。 1>proj - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== となったので、 Proj のプロパティの「リンカ」-「全般」の「追加のライブラリディレクトリ」に D:\Test\lib\lib_b\Debug を設定しました。 以上、Proj で lib_a を指定することなくビルドが可能となりました。 、

0xEF
質問者

お礼

ありがとうございます。 先ほど指導の通りにやってみたところ無事成功しました。 原因としては $(InputDir)\lib_a.lib ↓ $(InputDir)lib_a.lib ここでした。パスが通ってなかったということっぽいです・・・。 しかし私の環境ではlib_a.libが開けませんというエラーが出なかったので惑わされました・・・ ありがとうございました!

その他の回答 (7)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.7

>other.libが開けませんと 問題がごっちゃになっている気がしますが、 開けないというのは、文字通りの意味であって、 リンクエラーが起こる前に、該当のlibにパスが 通っていないことを表しています。 LibA側とExe側からきちっとパスの通った場所に other.libがあるかどうかをもう一度確認してみては いかがでしょう? >other.libは他のプロジェクトで自作した >スタティックライブラリでLibAと同じフォルダに入っていると仮定します 少なくとも、私の試した環境で、 上記であれば、正常にリンクできました。 LibAの中で、 #pragma comment ( lib, "testlib01.lib" ) を記述しているならば、リンクするlibはパスが 通っている場所に存在している必要はありますが、 Exe側では上記の記述は要求されないと思います。 ================================================ OS:WindowsXP SP3 コンパイラ:VC2008EE その他: ・ライブラリ定義ファイルあり ・プロジェクトの設定はコード生成をすべて、  マルチスレッド/マルチスレッドデバッグに変更しておきます。  #DLLでないことに注意 上記の環境で確認したコードです === testlib01 ================================== -- testlib01.def----------------- export testlib01  test01 @1 --- testlib01.h------------------- #ifndef INCLUDE_TEST01LIB_HEADER #define INCLUDE_TEST01LIB_HEADER void test01( void ); #endif//INCLUDE_TEST01LIB_HEADER --- testlib01.c------------------- #include <stdio.h> #include "testlib01.h" void test01( void ) {  printf("testlib01\n"); } === testlib02==================================== ---testlib.def------------------------- export testlib02  test02 @1 ---testlib02.h------------------------- #ifndef INCLUDE_TEST02_HEADER #define INCLUDE_TEST02_HEADER void test02( void ); #endif//INCLUDE_TEST02_HEADER --- testlib02.c------------------------- #include "testlib01.h" #include "testlib02.h" #pragma comment ( lib, "testlib01.lib" ) void test02( void ) {  test01(); } === testexe ================================= #include "testlib02.h" #pragma comment ( lib, "testlib02.lib" ) int main( void ) {  test02();  return 0; } ※全角スペースは半角スペースに直してください。 Exeコンパイル時のフォルダ構造は以下の通り +testexe  +Debug  |+testexe.exe  +testexe  |+Debug  |+testexe.vcproj  |+testlib01.lib  |+testlib02.lib  |+testlib02.h  |+testexe.c  +testexe.sln ライブラリのパスを整備すればもっときれいになりますが、 とりあえずの環境だったのでそのあたりは割愛しています。

0xEF
質問者

お礼

回答ありがとうございます。 問題がごっちゃになってしまってすみません。 現状ではtestexeフォルダにtest01.libを入れないでtest02.libの中にtest01.libの中身を埋め込む方法を知りたいと考えています。 今回の問題でいえば、ProjのフォルダにLibA.libとother.libを入れれば動作するのはわかっているのですが、ProjからはLibA.libを通してでしかother.lib内の関数を利用していないのでother.libを要求されるのは面倒臭いと思ったのです。 そこでLibAが使用しているother.libに入っている関数をLibA.libが一緒にライブラリとして固めてくれればProjフォルダにother.libを入れる必要がなくなる、と考えています。 (いままでの質問ではすべての情報を伝えきれていなかったようです・・・。申し訳ありませんでした。) ありがとうございました。

回答No.6

どうしてでしょね・・・。 試しに other.lib ============================================================ #include "stdafx.h" int OtherFunc( int a, int b ) { return( a + b ); } ============================================================ LibA.lib ============================================================ #include "stdafx.h" extern int OtherFunc( int a, int b ); int LibAFunc( int a, int b ) { return( OtherFunc( a, b ) ); } ============================================================ Proj.exe ============================================================ #include "stdafx.h" extern int LibAFunc( int a, int b ); int _tmain(int argc, _TCHAR* argv[]) { int i = LibAFunc( 100, 200 ); return 0; } ============================================================ というのを作って、ビルドしてみましたが、 LibA のプロパティの「追加の依存関係」で other.lib を追加していなかった場合は Proj.exe のビルドのとき、「OtherFunc が見つかりません」という内容のエラーになりましたが、 LibA のプロパティの「追加の依存関係」で other.lib を追加してやると、Proj.exe のビルドのとき、エラーがでなくなりました。 念のため、LIB.EXE で、LIB LIBA.LIB /LIST を実行してみると、ちゃんと、other.obj が入ってましたし、「追加の依存関係」に追加する方法で間違いないようですよ。 Proj の中で other.lib の関数を使用しているってコトはないですよね? それとか、「追加の依存関係」と間違って「追加のライブラリディレクトリ」の方に追加してしまっているとか・・・。

0xEF
質問者

お礼

ありがとうございます。 返信遅れてしまって申し訳ありません。 お二方にご教授していただいた方法を試してみたのですが、やはりリンクエラーが発生してしまっています。 何か決定的な勘違いをしているかもしれないので今回のテストのために制作したプロジェクト3つをアップローダ―にアップいたしました。 お手数をおかけしますがダウンロードして何が問題なのか確かめていただきたいと思います。 http://www1.axfc.net/uploader/Sc/so/176106 Download Password : lib よろしくお願いします。

回答No.5

>今確認してみたところ、スタティックライブラリのプロジェクトの設定では追加の依存ファイルという項目がなく、リンカオプションで指定することはできないようです。 LibA のプロジェクトのプロパティ ↓ 構成プロパティ ↓ ライブラリアン に「追加の依存関係」という項目がありませんか? ここに other.lib のパスを記述すれば良いと思います。

0xEF
質問者

お礼

ありがとうございます。 先ほど確認したところ確かにライブラリアンの中に追加の依存関係というものはありました。 しかし、other.libを指定してコンパイルしProjにてLibAと一緒にコンパイルしたところother.lib内に入っている関数のリンクエラーが出てしまったので、この方法では関数は埋め込まれないようです。 ありがとうございました。

noname#137556
noname#137556
回答No.4

#3 のお礼について ふーん、そうなんですね。 では、#pragma comment を使わずに、 LibA のリンカオプションで other.lib を指定したらどうでしょうか?

0xEF
質問者

お礼

ありがとうございます。 今確認してみたところ、スタティックライブラリのプロジェクトの設定では追加の依存ファイルという項目がなく、リンカオプションで指定することはできないようです。 (私が勘違いしているようでしたら申し訳ございません) ありがとうございました。

noname#137556
noname#137556
回答No.3

> other.libが開けませんと怒られてしまいます。 これって、LibA.lib のビルド時に出ていませんか?

0xEF
質問者

お礼

回答ありがとうございます。 LibA.libのビルド時には実はother.libは必要ないのでProjのコンパイル時に出ています。 (LibAのソースファイルに#pragma comment ( lib, "other.lib" )と記述しても、LibAのコンパイル時はファイルを参照しにいかないようなのでなくても大丈夫なようです。ただしLibA.libを使用するプロジェクト(実行ファイルを生成するようなプロジェクト)では要求されます。) (なぜ必要ではないのかはよくわかりませんが・・・) ありがとうございました。

noname#137556
noname#137556
回答No.2

ライブラリをくっつければいいのかな。 lib /OUT:hoge.lib LibA.lib other.lib

参考URL:
http://msdn.microsoft.com/ja-jp/library/e17b885t(v=VS.90).aspx
0xEF
質問者

お礼

ありがとうございます。 ツールを使用してくっつけてしまう方法ですね。 この方法は初めて見たのですが視野に入れたいと思います。 ありがとうございました!

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>ProjでLibAで制作したライブラリを使用するために#pragma comment ( lib, "LibA.lib" )とソースコード上に記述しました。 >しかし、other.libが開けませんと怒られてしまいます。 Projのプロジェクトの設定で、ライブラリの検索パスにLibAが入っていますか? 確か、設定が必要だったかと思いますが…。 # リンカオプションに「追加のライブラリ ディレクトリ」というのがあるかと。

0xEF
質問者

補足

回答ありがとうございます。 LibAのフォルダからLibA.libをコピーアンドペーストでProjのフォルダにコピーして使用できるようにしたいと思っています。 ですのでLibAのフォルダにパスを通すというのは今回はなしの方向でお願いします。 ありがとうございました!

関連するQ&A

  • VS2013のC++のlibの指定

    VS2013のC++のlibの指定に関した質問です。 下記のコードの代わりに、プロジェクトのリンカーオプション(一覧表の中の項目)で 指定できますか? #pragma comment( lib, "Release\\MathFuncsDll.lib" ) 以上、宜しくお願いします。

  • #pragma commentの相対パス指定

    #pragma commentの相対パス指定について、希望の動作をしないません。 状況は以下の通りです。 libというフォルダの中にlibA、libBの二つのフォルダがあり、それぞれのフォルダの中には、lib_a.lib、mylib_b.libというファイルがあるとします。 lib -libA -lib_a.lib -libB -lib_b.lib またライブラリディレクトリにはlibのパスのみが指定されていたとします。 この状況で#pragma comment(lib,"libA\\lib_a.lib")とすると、 「LINK : fatal error LNK1104: ファイル 'libA\lib_a.lib' を開くことができません。」 と出てしまいます。 #pragma commentの中では、相対パスは使えるはずなのですが、なぜこの場合はリンクが出来ないのでしょうか? ちなみに絶対パスで指定した場合はエラーは出ません。 できればフォルダで分割してライブラリを管理したいと考えているので、何か解決方法をご存知の方がいれば、ご教授ください。 環境は ・OS:Windows7 ・使用ソフト:Visual C++ 2010 Express ・言語:C++ です。

  • error LNK2001: 外部シンボル "_main" は未解決です

    VisualC++6.0で、新規作成→win32 Dinamic-Link Libraryでプロジェクト を作成し、dllファイルを作っています。 今までは、上手くコンパイル出来て、dllを作れていました。 友人の作ったライブラリにリンクして、ソースファイルで そのライブラリの関数を使って、コンパイルすると、 LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です。 というエラーが出て困っています。 今、プロジェクトの設定→リンク→アウトプットの エントリポイントシンボルはDllEntryPoint@12となっています。 どうしたら良いでしょうか? どなたかご教授くださると助かります。 ちなみに、ライブラリの関数をコメントにすると、コンパイル出来ます。

  • C++ の LNK2001エラー

    「sample.obj : error LNK2001: 外部シンボル ""void * __cdecl SetupDiGetClassDevsW(struct _GUID *,wchar_t const *,struct HWND__ *,unsigned long)" (?SetupDiGetClassDevsW@@$$FYAPAXPAU_GUID@@PB_WPAUHWND__@@K@Z)" は未解決です。」というエラーメッセージが出ます。  ソース中に extern "C" { #include "hidsdi.h" #include <setupapi.h> } #pragma comment(lib, "setupapi.lib") #pragma comment(lib, "hid.lib")  の記述をしています。  Visual C++ 2005 Express Edition で [プロジェクト] -> [プロパティ] -> [構成プロパティ] -> [リンカ] -> [追加のライブラリ] のところにディレクトリ設定も行っています。  どのようにしたら解決できるのでしょうか。

  • Borlandbcc55とMYSQLのコンパイル時にlibmysql.libやmysqlclient.libのリンクについて

    Windows上で、borlandbcc55、mysqlを利用しいてます。 Windows上のborlandbcc55、mysqlで C/C++のソースでMYSQLの接続・切断・管理・MYSQLのレコードの値の取得・値の表示の仕方の基礎を教えてください。 これなら動きますよというソースを教えて頂けたら有難いです。 Borlandbcc55とmysqlの設定 my_global.hとmysql.hをincludeして、 コンパイル時にlibmysql.libやmysqlclient.libをリンクしてやればできそうなのですが includeは Cのソースで #include "c:\mysql\include\mysql.h" #include "c:\mysql\include\my_global.h" と記述するだけでOKなのでしょうか? MYSQLのLibmysql.libの設定の仕方及びコンパイル時にlibmysql.libやmysqlclient.libを リンクする方法がわかりません。 bcc55コンパイラ設定のcfgファイルにlibMysql.libやmysqlclient.libを 追加設定必要ですか? 必要ならどう記述すればいいのでしょうか? また違う仕方なのでしょうか? 全く理解できていません。 そのリファレンスをみてもわかりません。 1 coff2omf c:\mysql\lib\opt\libmysql.lib c:\borland\bcc55\lib\libmysql.lib 2 ilink32 obj-Dateien, exe-Dateiname, map-Datei, Libraries 3 -> ilink32 c0x32.obj testmysql.obj , testmysql.exe , , import32.lib cw32.lib libmysql.lib これらの設定の仕方もわかりません。 設定に必要なのかどうかも理解できていません。 よろしくお願いします。

  • *.libを作成する方法

    自作のC++のライブラリを使おうとしましたが、 ある環境で、Cしかコンパイルできない環境だったので、 C関数でワンクッションおいた、Cのライブラリを作りたいのです。 しかし、libファイルの作り方がわかりません。 makeとかで作る方法が知りたいです。 C++のライブラリは、統合環境で作成したライブラリです。 そのライブラリ名はMyCPP.libとし、ヘッダはMyCPP.hppとします。 ワンクッション用のファイルは one.cppとし、ヘッダはone.hとします。 *** one.cpp int c_add(int a, int b) { MyCPP x return x.Add(a, b); } *** one.h extern "C" { int c_add(int a, int b); } cl one.cppとすると、エントリポイントがありませんと表示されます。 目的は one.libを作成したいです。

  • mfc80d.lib

    OpenCVとBlobを使って簡単な画像認識プログラムを作成したのですが、デバッグの段階でエラーを検出します(コンパイルは行えました) エラーメッセージが、 “fatal error LINK104: ファイル'mfc80d.lib'を開くことができません” と言うものです ライブラリかな?とも考えたのですが、自力での解決に限界が来ました 解決策等、よろしくお願い致します 使用している環境 OS:Vista HomePremium SP1 開発環境:Visual C++ 2008 Express Edition (2005はプロジェクトの読み込み自体が出来ませんでした)

  • Visual C++,OpenCVでのリンクエラー

    こんにちは。 現在、Microsoft Visual C++ 2010 の環境で、OpenCV(ver2.3.1)を用いて、画像認識のアプリケーションを作ろうと考えています。ただ、Visual C++ 、OpenCV共に扱うのが初めてで、openCVのライブラリーをC++に認識させることができていません。 具体的には、下記の様なエラーが出ます。 「 Sample.obj : error LNK2019: 未解決の外部シンボル _cvReleaseImage が関数 _wmain で参照されました。 (同様に、以下の外部シンボルも参照できていません。_cvDestroyAllWindows、_cvWaitKey、_cvShowImage、_cvSmooth、_cvCreateImage、_cvGetSize、_cvNamedWindow、_cvLoadImage) 」 リンクの設定が上手くできていないと考え、 プロジェクト > ○○のプロパティ > 構成プロパティ > リンカー > 全般 > 追加ライブラリディレクトリ に、C:\opencv\build\x64\vc10\lib というように記入し(64bit環境です)、また、 プロジェクト > ○○のプロパティ > 構成プロパティ > リンカー > 入力 > 追加依存ファイル に、opencv_core231d.lib;opencv_imgproc231d.lib;opencv_highgui231d.lib;opencv_objdetect231d.lib;opencv_contrib231d.lib;opencv_features2d231d.lib;opencv_flann231d.lib;opencv_gpu231d.lib;opencv_haartraining_engined.lib;opencv_legacy231d.lib;opencv_ts231d.lib;opencv_video231d.lib を追加しております。 実行しているサンプルファイルは下記になります。 -------------------- // Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" //プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに // 『C:\OpenCV2.3\include』を追加のこと #include "opencv2\\opencv.hpp" #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_core231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_imgproc231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_highgui231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_objdetect231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_contrib231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_features2d231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_flann231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_gpu231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_legacy231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_ts231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_video231d.lib") #else //Releaseモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_core231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_imgproc231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_highgui231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_objdetect231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_contrib231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_features2d231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_flann231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_gpu231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_legacy231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_ts231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_video231.lib") #endif int _tmain(int argc, _TCHAR* argv[]) { //画像データの読込 IplImage* src_img = cvLoadImage("C:\\opencv\\samples\\c\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if (src_img == NULL){ return 0; } //表示ウィンドウの作成 cvNamedWindow("src"); cvNamedWindow("dst"); //処理後画像データの確保 IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels); //画像処理例(ガウシアンフィルタ) cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9); //画像の表示 cvShowImage ("src", src_img); cvShowImage ("dst", dst_img); //キー入力待ち cvWaitKey (0); //全てのウィンドウの削除 cvDestroyAllWindows(); //画像データの解放 cvReleaseImage(&src_img); cvReleaseImage(&dst_img); return 0; } --------------- 初心者な質問で大変恐縮ながら、どこを修正すればよいかお分かりでしたら、お教え頂けませんでしょうか?何卒宜しくお願いします。

  • VisualStudio の規定値が消滅した

    VisualStudioPro2008を使用して開発しています。 今までコンパイルエラーがなかったところに突然リンカエラーが発生してCOM系の関数だったので 怪しい プロジェクトのプロパティ>構成プロパティ>C/C++>全般>追加のインクルードディレクトリ の継承の値を見てみたところkernel32.libなどの値が消えていました。 いろいろ調べて Microsoft Visual Studio 9.0\VC\VCProjectDefaults\CoreWin.vsprops を見てみたところとなっていました。 ~~上部略 <Tool Name="VCLinkerTool" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/> </VisualStudioPropertySheet> この設定を毎回独自に設定のは結構つらいので この値の設定方法もしくは代替え方法があれば教えてください #pragma comment のようなソースを書き換える方法ではなく あくまでも設定の方で変更したいです。 (毎回プロジェクト作成の規定値にしてしまいたい)

  • C++言語でのライブラリファイルの作成と使用法

    よろしくお願いします。 C言語において、例えばMinGWのCコンパイラのLibディレクトリには、拡張子が「.a」のライブラリファイルがたくさん存在しています。これらは、arコマンドで ar crv libMine.a 1.o 2.o のように作成されるものだと認識しています。 一方、C++言語において、例えばBorlandのC++コンパイラのLibディレクトリには、拡張子が「.lib」というライブラリファイルがたくさん存在します。 これらのファイブラリファイルは、C言語のaファイルと同じ役割をする考えてよいのでしょうか? また、C++において自作のライブラリファイル(libファイル)を作成するにはどうすればよいのでしょうか? 次に、C++における自作ライブラリの使用法についてですが、Cではコンパイル時に gcc -o 1.exe 1.c libMine.a のようにして、自作のライブラリファイルを使うことができますが C++のコンパイルコマンド、例えばbcc32コマンドを使ってコンパイルする時に、 自分が作成したlibファイルを使うにはどのようにすればよいのでしょうか? 最後に、Borland C++コンパイラをインストールするときに、Binディレクトリにあるbcc.cfgファイルに -L"c:\Borland\Bcc55\lib" と記述したのですが、これは、 c:\Borland\Bcc55\libにあるlibファイルをコンパイル時に自動的に読み込むということなのでしょうか?

専門家に質問してみよう