MS Visual studio2015で生成したC++のobjファイルをlibファイルに変換したいのですが、
方法を教えてください。
obj ----> lib ?
Re: obj ----> lib ?
Windows10,VS2017Community、Win32ではライブラリアン LIB.EXEを使います。
https://msdn.microsoft.com/ja-jp/library/0xb6w1f8.aspx
Microsoft (R) Library Manager Version 14.10.25019.0
Copyright (C) Microsoft Corporation. All rights reserved.
使い方: LIB [オプション] [ファイル]
オプション:
/DEF[:ファイル名]
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
/EXPORT:シンボル
/EXTRACT:メンバー名
/INCLUDE:シンボル
/LIBPATH:ディレクトリ
/LIST[:ファイル名]
/LTCG
/MACHINE:{ARM|ARM64|EBC|X64|X86}
/NAME:ファイル名
/NODEFAULTLIB[:ライブラリ]
/NOLOGO
/OUT:ファイル名
/REMOVE:メンバー名
/SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|
NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]]
/VERBOSE
/WX[:NO]
Re: obj ----> lib ?
コマンドラインだとこうなります。
それとも、プロジェクトフィルを作る方法が知りたいのですか?
MSDN の チュートリアル: スタティック ライブラリの作成と使用 (C++) が参考になりませんか?
C:\tmp>type sub1.c
#include <stdio.h>
void sub1(void)
{
puts("sub1");
}
C:\tmp>type sub2.c
#include <stdio.h>
void sub2(void)
{
puts("sub2");
}
C:\tmp>cl -nologo -c sub1.c sub2.c
sub1.c
sub2.c
コードを生成中...
C:\tmp>lib -nologo -out:sub.lib sub1.obj sub2.obj
C:\tmp>type main.c
#include <stdio.h>
void sub2(void);
int main(void)
{
puts("main");
sub2();
}
C:\tmp>cl -nologo main.c sub.lib
main.c
C:\tmp>main
main
sub2
C:\tmp>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D40B-7598 です
C:\Users\sakamoto\tmp\C\tmp のディレクトリ
2017/08/01 09:21 <DIR> .
2017/08/01 09:21 <DIR> ..
2017/08/01 09:21 568 a.txt
2017/08/01 09:15 90 main.c
2017/08/01 09:17 77,824 main.exe
2017/08/01 09:17 663 main.obj
2017/08/01 09:19 1,560 sub.lib
2017/08/01 09:15 61 sub1.c
2017/08/01 09:17 628 sub1.obj
2017/08/01 09:16 61 sub2.c
2017/08/01 09:17 628 sub2.obj
9 個のファイル 82,083 バイト
2 個のディレクトリ 88,566,407,168 バイトの空き領域
MSDN の チュートリアル: スタティック ライブラリの作成と使用 (C++) が参考になりませんか?
Re: obj ----> lib ?
お返答本当にありがとうございます。
説明不足申し訳ありませんが、
objファイルをLIBに変換したいのです。
ソースコードファイルなしの話です。
*.c からLIB生成についてのやり方分かっています。
また宜しくお願いします
説明不足申し訳ありませんが、
objファイルをLIBに変換したいのです。
ソースコードファイルなしの話です。
*.c からLIB生成についてのやり方分かっています。
また宜しくお願いします
Re: obj ----> lib ?
スタティックライブラリというのは、複数のオブジェクト
ファイルを一つにまとめたものなんですが、もちろん、
一つのオブジェクトファイルでもかまいません。
hoge.cpp がなくても、hoge.obj があれば、
lib hoge.obj
で、hoge.lib ができます。
ファイルを一つにまとめたものなんですが、もちろん、
一つのオブジェクトファイルでもかまいません。
hoge.cpp がなくても、hoge.obj があれば、
lib hoge.obj
で、hoge.lib ができます。
Re: obj ----> lib ?
>objファイルをLIBに変換したいのです。
>ソースコードファイルなしの話です。
>*.c からLIB生成についてのやり方分かっています。
ではなぜその必要性をがあるのか。
objファイルはどのようにして作られたものなのか。
の説明が不足のようなきがしますが...。
>ソースコードファイルなしの話です。
>*.c からLIB生成についてのやり方分かっています。
ではなぜその必要性をがあるのか。
objファイルはどのようにして作られたものなのか。
の説明が不足のようなきがしますが...。
Re: obj ----> lib ?
お返答ありがとうございます
かずま 様が書かれました:
>hoge.cpp がなくても、hoge.obj があれば、
> lib hoge.obj
>で、hoge.lib ができます。
素晴らしい! 知りませんでした。
ただ、この「lib」命令はどのシステムの命令でしょうか。
例えば、
Windowsのコマンドプロンプトにて実行できます?
=======
Math 様が書かれました:
>objファイルはどのようにして作られたものなのか。
>の説明が不足のようなきがしますが...。
① ソースコードは他人に開発されたもので、相手が公表したくないかしてもらえない;
② ソースコードがダメな修正で正しさ保障がないため、信用できるオリジナルobjを利用したい(Lib化したい)
等の場合を想定しています。
またどうぞ 宜しくお願いします。
かずま 様が書かれました:
>hoge.cpp がなくても、hoge.obj があれば、
> lib hoge.obj
>で、hoge.lib ができます。
素晴らしい! 知りませんでした。
ただ、この「lib」命令はどのシステムの命令でしょうか。
例えば、
Windowsのコマンドプロンプトにて実行できます?
=======
Math 様が書かれました:
>objファイルはどのようにして作られたものなのか。
>の説明が不足のようなきがしますが...。
① ソースコードは他人に開発されたもので、相手が公表したくないかしてもらえない;
② ソースコードがダメな修正で正しさ保障がないため、信用できるオリジナルobjを利用したい(Lib化したい)
等の場合を想定しています。
またどうぞ 宜しくお願いします。
Re: obj ----> lib ?
Visual Studio 2015 については知りませんが、蒸し さんが書きました: Windowsのコマンドプロンプトにて実行できます?
Visual Studio 2017 なら、スタートメニューに
- Visual Studio 2017 フォルダ
- debuggable Package Manager
- Developer Command Prompt for VS 2017 (VsDevCmd.bat へのショートカット)
- ....
- Visual Studio 2017 (devenv.exe へのショートカット)
- Visual Studio Installer (vs_installer.exe へのショートカット)
があり、Developer Command Prompt for VS 2017 を起動すると、
コンパイルなどに必要な PATH や環境変数を設定したコマンド
プロンプトが開き、cl や link や lib などのコマンドが利用できます。
Visula Studio 2013 Express Edition なら、スタートメニューに
- Visual Studio 2013
- Visual Studio ツール
- VS Express 2013 for Desktop
があり、Visual Studio ツールを開くと、そこに
開発者コマンドプロンプト for VS2013 があります。
あるいは、通常のコマンドプロンプトを開いた後、
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
を実行して、環境変数を設定することもできます。
Re: obj ----> lib ?
VS 2015だと,
[スタートメニュー] - [Visual Studio 2015] - [開発者コマンドプロンプト for VS2015]
がVS 2017の
[スタートメニュー] - [Visual Studio 2017] - [Develper Command Prompt for 2017]
に相当します。
[スタートメニュー] - [Visual Studio 2015] - [開発者コマンドプロンプト for VS2015]
がVS 2017の
[スタートメニュー] - [Visual Studio 2017] - [Develper Command Prompt for 2017]
に相当します。
Re: obj ----> lib ?
http://dixq.net/forum/viewtopic.php?f=3&t=18665
(当時ハンドルネームC6b14は私です...ハッカーさんのせいで変えた...)を見るとプロの方でも 開発者コマンドプロンプトを知らない人もいるようですね。
lib /? とか cl /? とかうって見てください。nmake /? とか dumpbin /? はとても有用です。アセンブラー、逆アセンブル、libの構造が見れますよ。
(当時ハンドルネームC6b14は私です...ハッカーさんのせいで変えた...)を見るとプロの方でも 開発者コマンドプロンプトを知らない人もいるようですね。
lib /? とか cl /? とかうって見てください。nmake /? とか dumpbin /? はとても有用です。アセンブラー、逆アセンブル、libの構造が見れますよ。
Re: obj ----> lib ?
[雑談]Windows10ではUbuntu( Linux )がNativeで使えます。Creators Updateで sudo apt install build-essential として gcc がつかえますがコマンドラインです。gcc はコマンドラインでの説明が多いですよね。業務ではvi( Vim )を使うことも多かったですが数~数万行になるとviでないと!(IBM大型Computer CPU256個 Unix機)。Windows10でもVimをいれました。(emacsは入れてないですがviになれているのですね)