obj ----> lib ?

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

obj ----> lib ?

#1

投稿記事 by 蒸し » 2年前

MS Visual studio2015で生成したC++のobjファイルをlibファイルに変換したいのですが、
方法を教えてください。

Math

Re: obj ----> lib ?

#2

投稿記事 by Math » 2年前

Windows10,VS2017Community、Win32ではライブラリアン LIB.EXEを使います。

コード:

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]

https://msdn.microsoft.com/ja-jp/library/0xb6w1f8.aspx

かずま

Re: obj ----> lib ?

#3

投稿記事 by かずま » 2年前

コマンドラインだとこうなります。

コード:

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 ?

#4

投稿記事 by 蒸し » 2年前

お返答本当にありがとうございます。

説明不足申し訳ありませんが、
objファイルをLIBに変換したいのです。
ソースコードファイルなしの話です。

*.c からLIB生成についてのやり方分かっています。

また宜しくお願いします

かずま

Re: obj ----> lib ?

#5

投稿記事 by かずま » 2年前

スタティックライブラリというのは、複数のオブジェクト
ファイルを一つにまとめたものなんですが、もちろん、
一つのオブジェクトファイルでもかまいません。

hoge.cpp がなくても、hoge.obj があれば、

 lib hoge.obj

で、hoge.lib ができます。

Math

Re: obj ----> lib ?

#6

投稿記事 by Math » 2年前

>objファイルをLIBに変換したいのです。
>ソースコードファイルなしの話です。

>*.c からLIB生成についてのやり方分かっています。
ではなぜその必要性をがあるのか。
objファイルはどのようにして作られたものなのか。
の説明が不足のようなきがしますが...。

蒸し

Re: obj ----> lib ?

#7

投稿記事 by 蒸し » 2年前

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

かずま 様が書かれました:
>hoge.cpp がなくても、hoge.obj があれば、
> lib hoge.obj
>で、hoge.lib ができます。

素晴らしい! 知りませんでした。
ただ、この「lib」命令はどのシステムの命令でしょうか。
例えば、
Windowsのコマンドプロンプトにて実行できます?

=======
Math 様が書かれました:
>objファイルはどのようにして作られたものなのか。
>の説明が不足のようなきがしますが...。

① ソースコードは他人に開発されたもので、相手が公表したくないかしてもらえない;
② ソースコードがダメな修正で正しさ保障がないため、信用できるオリジナルobjを利用したい(Lib化したい)
等の場合を想定しています。

またどうぞ 宜しくお願いします。

かずま

Re: obj ----> lib ?

#8

投稿記事 by かずま » 2年前

蒸し さんが書きました: Windowsのコマンドプロンプトにて実行できます?
Visual Studio 2015 については知りませんが、

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
を実行して、環境変数を設定することもできます。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: obj ----> lib ?

#9

投稿記事 by YuO » 2年前

VS 2015だと,
[スタートメニュー] - [Visual Studio 2015] - [開発者コマンドプロンプト for VS2015]
がVS 2017の
[スタートメニュー] - [Visual Studio 2017] - [Develper Command Prompt for 2017]
に相当します。

Math

Re: obj ----> lib ?

#10

投稿記事 by Math » 2年前

http://dixq.net/forum/viewtopic.php?f=3&t=18665
(当時ハンドルネームC6b14は私です...ハッカーさんのせいで変えた...)を見るとプロの方でも 開発者コマンドプロンプトを知らない人もいるようですね。

lib /?  とか cl /?  とかうって見てください。nmake /? とか dumpbin /? はとても有用です。アセンブラー、逆アセンブル、libの構造が見れますよ。  

Math

Re: obj ----> lib ?

#11

投稿記事 by Math » 2年前

[雑談]Windows10ではUbuntu( Linux )がNativeで使えます。Creators Updateで sudo apt install build-essential として gcc がつかえますがコマンドラインです。gcc はコマンドラインでの説明が多いですよね。業務ではvi( Vim )を使うことも多かったですが数~数万行になるとviでないと!(IBM大型Computer CPU256個 Unix機)。Windows10でもVimをいれました。(emacsは入れてないですがviになれているのですね)

蒸し

Re: obj ----> lib ?

#12

投稿記事 by 蒸し » 2年前

皆さん、いろいろご教授本当に感謝します。
いい勉強になりました。

返信

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