タグ付けされた質問 「linker」

リンカは、コンパイルされたプログラミング言語で記述されたソースコードから実行可能ファイルを生成するためのツールチェーンの一部です。複数のファイルでコンパイルされたオブジェクトコードを受け取り、それらから単一の「リンクされた」実行可能ファイルを生成します。

15
コンパイルされた実行可能ファイルにDLLを埋め込む
既存のDLLをコンパイル済みのC#実行可能ファイルに埋め込むことは可能ですか(配布するファイルが1つだけになるように)?可能であれば、どうすればそれを実行できますか? 通常、私はDLLを外に置いてセットアッププログラムですべてを処理するだけでかっこいいですが、これについて質問してくれた人が何人かいて、正直にわかりません。
619 c#  .net  dll  merge  linker 


6
コンパイル/リンクプロセスはどのように機能しますか?
コンパイルとリンクのプロセスはどのように機能しますか? (注:これはStack OverflowのC ++ FAQへのエントリになることを目的としています。このフォームでFAQを提供するという考えを批評したい場合は、これをすべて開始したメタへの投稿がそのための場所になります。回答その質問はC ++チャットルームで監視され、FAQのアイデアが最初から始まっているため、アイデアを思いついた人があなたの答えを読む可能性が非常に高くなります。

4
共有オブジェクト(.so)、静的ライブラリ(.a)、DLL(.so)の違いは?
Linuxのライブラリに関していくつかの議論に参加しており、いくつかのことを確認したいと思います。 アプリケーションを構築するときにライブラリを使用する方法は2つあるというのは私の理解です(間違っている場合は修正してください。後で投稿を編集します)。 静的ライブラリー(.aファイル):リンク時に、ライブラリー全体のコピーが最終アプリケーションに入れられるため、ライブラリー内の関数は常に呼び出し側アプリケーションで使用できます。 共有オブジェクト(.soファイル):リンク時に、オブジェクトは対応するヘッダー(.h)ファイルを介してAPIに対して検証されるだけです。ライブラリは、実行時まで実際には使用されません。 静的ライブラリの明らかな利点は、アプリケーション全体を自己完結できることです。動的ライブラリの利点は、「。so」ファイルを置き換えることができることです(つまり、セキュリティのために更新する必要がある場合)バグ)ベースアプリケーションを再コンパイルする必要はありません。 どちらも「.so」ファイルですが、共有オブジェクトとダイナミックリンクライブラリ(DLL)を区別する人がいると聞いています。Linuxまたは他のPOSIX準拠OS(つまり、MINIX、UNIX、QNXなど)でのC / C ++開発に関して、共有オブジェクトとDLLの間に違いはありますか?(これまでのところ)1つの重要な違いは、共有オブジェクトは実行時に使用されるだけであり、アプリケーション内でdlopen()呼び出しを使用してDLLを最初に開く必要があるということです。 最後に、一部の開発者が「共有アーカイブ」について言及しているのを聞いたことがあります。これは、私の理解では静的ライブラリでもありますが、アプリケーションで直接使用されることはありません。代わりに、他の静的ライブラリが「共有アーカイブ」にリンクして、共有アーカイブから構築中の静的ライブラリに一部(すべてではない)の関数/リソースをプルします。 よろしくお願いします。 更新 これらの用語が私に提供された状況では、Linuxを学習する必要があるWindows開発者のチームが使用した事実上誤った用語でした。私はそれらを修正しようとしましたが、(正しくない)言語の規範が行き詰まりました。 共有オブジェクト:プログラムの起動時にプログラムに自動的にリンクされ、スタンドアロンファイルとして存在するライブラリ。ライブラリはコンパイル時にリンクリストに含まれます(つまりLDOPTS+=-lmylib、という名前のライブラリファイルの場合mylib.so)。ライブラリは、コンパイル時とアプリケーションの起動時に存在している必要があります。 静的ライブラリ:アプリケーションコードと、プログラムのビルド時にプログラムに自動的にリンクされるライブラリコード、および両方を含む最終バイナリを含む単一(大きい)アプリケーションのビルド時に実際のプログラム自体にマージされるライブラリメインプログラムとライブラリ自体は、単一のスタンドアロンバイナリファイルとして存在します。ライブラリは、コンパイル時にリンクリストに含まれます(つまりLDOPTS+=-lmylib、mylib.aという名前のライブラリファイルの場合)。ライブラリはコンパイル時に存在している必要があります。 DLL:基本的に共有オブジェクトと同じですが、ライブラリはコンパイル時にリンクリストに含まれるのではなく、dlopen()/ dlsym()コマンドを介してロードされるため、プログラムをコンパイルするためにライブラリがビルド時に存在する必要はありません。また、ライブラリは、dlopen/ dlsym呼び出しが行われたときにのみ必要になるため、アプリケーションの起動時またはコンパイル時に(必ずしも)存在する必要はありません。 共有アーカイブ:基本的に静的ライブラリと同じですが、「export-shared」フラグと「-fPIC」フラグを使用してコンパイルされます。ライブラリはコンパイル時にリンクリストに含まれます(つまりLDOPTS+=-lmylibS、という名前のライブラリファイルの場合mylibS.a)。2つの違いは、共有オブジェクトまたはDLLが共有アーカイブを独自のコードに静的にリンクし、共有オブジェクトの関数を他のプログラムで使用するだけでなく、他のプログラムで使用できるようにする場合に、この追加のフラグが必要になることです。 DLLの内部。これは、誰かが静的ライブラリを提供し、それをSOとして再パッケージ化したい場合に役立ちます。ライブラリはコンパイル時に存在している必要があります。 追加アップデート 「DLL」と「shared library」の違いは、私が当時働いていた会社での(怠惰で不正確な)口語表現(Windows開発者はLinux開発に移行せざるを得ず、用語は行き詰まっている)であり、上記の説明に忠実でした。 さらに、S「共有アーカイブ」の場合、ライブラリ名の後に続く「」リテラルは、その会社で使用されている規則であり、業界では一般的ではありませんでした。
273 c++  c  linux  dll  linker 

5
「静的にリンクされた」および「動的にリンクされた」とはどういう意味ですか?
「静的にリンクされた」および「動的にリンクされた」という用語をよく耳にしますが、C、C ++、またはC#で記述されたコードを指すことがよくあります。彼らは何であり、彼らは何を話しているのですか、そして彼らは何を結び付けていますか?

5
LNK4098の解決:defaultlib 'MSVCRT'が競合します
この警告: LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library Visual Studioでかなり一般的な警告です。その正確な理由とそれを処理する正しい方法(あるとしても)を理解したいと思います。 これは、でコンパイルされたデバッグビルドで表示され/MDdます。プロジェクトは、ウィンドウVersion.dllなどpdh.dllにリンクされており、それ自体がとリンクしていMSVCRT.dllます。明らかに、これらのデバッグバージョンがなく、コンパイルできません。 だから私/NODEFAULTLIB:MSVCRTはリンカのコマンドラインに追加し、実際には警告を削除しました。しかし、これは実際に何をするのでしょうか?そして、なぜそれが必要なのですか?

17
typeinfoへのg ++​​未定義参照
私は次のエラーに遭遇しました(そして解決策はオンラインで見つかりましたが、Stack Overflowにはありません)。 (.gnu.linkonce。[stuff]):[メソッド] [オブジェクトファイル]への未定義の参照:(。gnu.linkonce。[stuff]): `[クラス名]のtypeinfoへの未定義の参照 ' これらの「typeinfoへの未定義の参照」リンカーエラーの1つが表示されるのはなぜですか? (舞台裏で何が起こっているかを説明できる場合のボーナスポイント。)
209 c++  linker  g++ 

14
libpthread.so.0:シンボルの追加エラー:コマンドラインにDSOがありません
openvswitch-1.5.0をコンパイルしているときに、次のコンパイルエラーが発生しました。 gcc -Wstrict-prototypes -Wall -Wno-sign-compare -Wpointer-arith -Wdeclaration-after-statement -Wformat-security -Wswitch-enum -Wunused-parameter -Wstrict-aliasing -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -Wno-override-init -g -O2 -export-dynamic ***-lpthread*** -o utilities/ovs-dpctl utilities/ovs-dpctl.o lib/libopenvswitch.a /home/jyyoo/src/dpdk/build/lib/librte_eal.a /home/jyyoo/src/dpdk/build/lib/libethdev.a /home/jyyoo/src/dpdk/build/lib/librte_cmdline.a /home/jyyoo/src/dpdk/build/lib/librte_hash.a /home/jyyoo/src/dpdk/build/lib/librte_lpm.a /home/jyyoo/src/dpdk/build/lib/librte_mbuf.a /home/jyyoo/src/dpdk/build/lib/librte_ring.a /home/jyyoo/src/dpdk/build/lib/librte_mempool.a /home/jyyoo/src/dpdk/build/lib/librte_malloc.a -lrt -lm /usr/bin/ld: /home/jyyoo/src/dpdk/build/lib/librte_eal.a(eal.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5' /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing …

11
“ / usr / bin / ld:cannot find -lz”
Ubuntu 10.04でAndroidソースコードをコンパイルしようとしています。私は言ってエラーが出ます、 / usr / bin / ld:-lzが見つかりません どうすれば修正できますか?どういうcannot find -lz意味ですか?ここに完全なエラーメッセージがあります: external/qemu/Makefile.android:1101: warning: overriding commands for target `external/qemu/android/avd/hw-config-defs.h' external/qemu/Makefile.android:933: warning: ignoring old commands for target `external/qemu/android/avd/hw-config-defs.h' host SharedLib: libneo_cgi (out/host/linux-x86/obj/lib/libneo_cgi.so) /usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../libz.so when searching for -lz /usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../libz.a when searching for -lz /usr/bin/ld: skipping incompatible /usr/lib/libz.so …
172 linux  gcc  linker 

7
ldは既存のライブラリを見つけることができません
このDebian lennyシステムでアプリケーションをg ++とリンクしようとしています。ldは、指定されたライブラリーを見つけられないと不平を言っています。ここでの具体的な例はImageMagickですが、他のいくつかのライブラリでも同様の問題が発生しています。 私はリンカーを次のように呼び出しています: g++ -w (..lots of .o files/include directories/etc..) \ -L/usr/lib -lmagic ldは文句を言う: /usr/bin/ld: cannot find -lmagic ただし、libmagicは存在します。 $ locate libmagic.so /usr/lib/libmagic.so.1 /usr/lib/libmagic.so.1.0.0 $ ls -all /usr/lib/libmagic.so.1* lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0 -rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0 $ ldd /usr/lib/libmagic.so.1.0.0 …


5
Cのオブジェクトファイルとは
Cのライブラリについて読んでいますが、オブジェクトファイルの説明はまだわかりません。他のコンパイル済みファイルとオブジェクトファイルの実際の違いは何ですか? 誰かが人間の言語で説明できたらうれしいです。

6
静的ライブラリを他の静的ライブラリにリンクする
多くの静的ライブラリ(a_1-a_n)に依存する小さなコードがあります。そのコードを静的ライブラリにパッケージ化して、他の人が利用できるようにしたいと考えています。 私の静的ライブラリは、Xと呼んでも問題なくコンパイルされます。 Xの関数を使用する簡単なサンプルプログラムを作成しましたが、Xにリンクしようとすると、ライブラリa_1-a_nからシンボルが欠落しているという多くのエラーが発生します。 XとXに必要なすべての機能(a_1-a_nから選択されたビット)を含む新しい静的ライブラリYを作成して、プログラムをリンクする人々にYだけを配布できる方法はありますか? 更新: 私はarですべてをダンプして1つのメガライブラリを作成することだけを見てきましたが、必要のない多くのシンボルが含まれます(すべての.oファイルは約700 MBですが、静的にリンクされた実行可能ファイルは7です) MB)。実際に必要なものだけを含める良い方法はありますか? これは、複数のC / C ++ライブラリを1つに結合する方法に密接に関連しているように見えますか?。
138 c++  linker  ar  .a 

2
ライブラリを静的にリンクするようにgccに直接指示する
静的にリンクするライブラリを指定-Wl,-Bstaticするために使用するのは不思議ですgcc。結局のところgcc、ライブラリ(-Ldir、-llibname)とのリンクに関する他のすべての情報を直接伝えています。 どのライブラリを静的にリンクする必要があるかをgccドライバに直接伝えることは可能ですか? 明確化:特定のライブラリーが静的バージョンにのみ存在する場合、それを使用せずにそれを使用することを知っています-Wl,-Bstaticがgcc、静的ライブラリーを優先することをほのめかしたいと思います。ライブラリファイルを直接指定するとリンクされることも知っていますが、静的ライブラリと動的ライブラリを同じように含めるためのセマンティックを維持することを好みます。

20
エラーLNK2038: '_ITERATOR_DEBUG_LEVEL'の不一致が検出されました:値 '0'はmain.objの値 '2'と一致しません
私は自分の問題に対する多くの解決策を読みましたが、何の助けにもなりませんでした。私はきれいにして、再構築してみました。ビジュアル2010を再インストールし、プロから究極に変更。しかし、それでもなぜこのエラーが発生するのかわかりません。私のプロジェクトは次のようになります。静的ライブラリをテストする1つのExeソリューション。1 Dll Solution静的ライブラリ。dllに変換されるコードは、ClassificationFrameworkと呼ばれる1 libの関数を使用しています。このlibをヘッダーとcppとして提供したので、基本的にはソースコードです。Exeソリューションでは、生成されたライブラリ+他のいくつかのライブラリをリンクして実行しました+ ClassificationFramework.dll。リリースを使用するとすべてが正常に機能しますが、デバッグに変更すると(いくつかのものをデバッグしたいため、リリースモードでデバッガーをスキップするのにうんざりしています)、次のようになります。 2>Link: 2> ClassificationFramework.lib(SampleClass.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance 2>ClassificationFramework.lib(SampleClass.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 2>ClassificationFramework.lib(SampleNamesSet.obj) : …
131 c++  debugging  linker 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.