問題タブ [ld]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 作成したダイナミックライブラリとg++がリンクしないのはなぜですか?
私はすべて同じライブラリに依存するいくつかのアプリケーションを作成しようとしてきましたが、ダイナミックライブラリが私の最初の考えでした。それで私は「ライブラリ」を書き始めました。
次に、「ライブラリ」をコンパイルします
次に、ライブラリを使用するファイルをすばやく作成しました。
それから私はそれをコンパイルしようとしました
ただし、次のエラーでコンパイルされません。
私は非常に明白な何かが欠けていると思います、私を助けてください:)
assembly - モノ「asmonly」オプション
「hello world」を出力する MonoDevelop を使用して、単純な mono 実行可能ファイルを作成しました。AOT の「asmonly」オプションを試してみたかったのです。そう:
セグメンテーション違反が発生するのはなぜですか? Fedora 12 x64 を使用しています。そして、ld の「エントリ シンボル _start が見つかりません」というエラーは何ですか?
ありがとう!
c - 共有ライブラリを別のバージョンの libc に再リンクする
特定のバージョンの libc (GLIBC2.4) でコンパイルされた Linux 共有ライブラリ (.so) があり、別のバージョンの libc を使用するシステムでそれを使用する必要があります。問題のライブラリのソースがないため、新しいシステム用に再コンパイルできません。そのライブラリの依存関係を別の libc に変更することは何とか可能ですか?
c - 関数の暗黙の宣言
ヘッダーを使用してコードを整理しただけですが、これを行ったのと同じように、リンク時にエラーになるという警告が表示されました。
次のようなコード(ヘッダー内にある関数の使用)がありますtest.c
:
そして私のtest1.h
ヘッダーは次のようなものです:
そしてtest1.c
コードをコンパイルしようとすると、次のようになりました。
ubuntu@eeepc:~/Development/Test$ gcc -o test.o -c test.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs
test.c: 関数 'main' 内:
test.c:11: 警告: 暗黙的関数 'Testing' の宣言<br> ubuntu@eeepc:~/Development/Test$
当時は単なる警告ですが、リンクしようとすると...
ubuntu@eeepc:~/Development/Test$ ld -T linker.ld -o kernel.bin loader.o test.o
test.o: In function Testing'main':
test.c:(.text+0xfc): undefined reference to
私は何をする必要がありますか?
linux - solaris elfedit:Linuxに似たものはありますか?(共有ライブラリエディタ)?
Linux:コンパイルされた共有ライブラリを編集する方法はありますか?
DT_SYMBOLIC flag
具体的には、コンパイル済みのバイナリ共有ライブラリにを追加する方法を探していますか?
これが私がこれを求めている理由です:
私たちのアプリケーションはで構成されています
- 独自のライブラリ(静的libXXX.a)
- 一部のサードパーティライブラリ(バイナリのみの共有ライブラリlibYYY.so)
これまでのところ、アプリケーションはすべて問題ありません。
これで、独自の静的* libXXX.aライブラリを共有ライブラリバージョン(libXXX.so)に置き換えました。
すべてが正常にコンパイルおよびリンクされます。
しかし、今アプリケーションを実行すると、アプリケーションが起動し、予想される多くの処理を実行します。その後、途中でクラッシュします。gdbバックトレースは、クラッシュが一部のサードパーティ共有ライブラリで発生することを示しています。
私はSOFを検索して、ここで興味深い記事を見つけました。
私が言及しているヒントは
それが本当に役立つとは思えませんが、試してみる価値があると思います。
DT_SYMBOLIC flag
すでにコンパイル/リンクされている共有ライブラリにを追加する方法はありますか?
環境:g++v4.2.4およびbinutilsv20を使用したdebianlenny64ビット。
編集:solarisには。と呼ばれるプログラムがありelfedit
ます。Linuxに似たものはありますか?
gcc - ELF 共有ライブラリ: 境界外の再配置オフセット
ELF バイナリをチェックするためにelfutils
呼び出されるプログラムを含むソフトウェア パッケージがあります ( C の場合と同様 - 名前の由来)。eu-elflint
lint
好奇心のために、このツールを使用して独自の共有ライブラリをチェックしたところ、次のような多くの問題が見つかりました。
クロスチェックとして、以下のソースコードから非常に簡単な共有ライブラリを構築しました
そして再挑戦…
ご覧のとおり、些細な例でも多くの問題が示されています。
ところで:私はgcc v4.4.1でUbuntu-Karmic-32bitを使用しています
ところで:... gcc v4.2.4を使用したDebian-Lenny-64bitでも同じことが起こります
これは私が心配すべきことですか?
c++ - 静的ライブラリを共有ライブラリに変換します (libsome.a から libsome.so を作成します): 私のシンボルはどこにありますか?
この質問のタイトルは完全にだまされていますが、その質問の回答は役に立ちません。
静的ライブラリにパックされた一連のオブジェクト ファイルがあります。
オブジェクトファイルの代わりに libsome.a から libsome.so を生成したいのですが、ライブラリは本当にベアボーンです:
静的ライブラリは問題ありません。少なくとも、それを実行可能ファイルに完全にリンクして、含まれている機能を実行させることができます。また、foo.o と bar.o から libsome.so を作成すれば問題ありません。
c - 環境変数を介してディレクトリを探す場所をldに伝える
クラスの C および C++ ファイルを採点していますが、この課題では GSL ライブラリを使用しています。私のコンピュータには root 権限がないので、私の GSL ライブラリはホーム ディレクトリにインストールされています。
これは、自分でプログラムを作成する場合には問題になりません。適切な -L フラグと -I フラグを gcc に追加するだけだからです。
しかし、学生のファイルをコンパイルするとき、すべてのメイクファイルを編集したくありません。代わりに、適切なディレクトリを環境変数に入れて、シームレスに実行したいと考えています。
この目的のために、次の変数をライブラリまたはインクルードの場所と共にエクスポートしました: C_INCLUDE_PATH、CPLUS_INCLUDE_PATH、LIBRARY_PATH、および LD_LIBRARY_PATH
しかし、学生のプロジェクトをコンパイルすると、
次のエラーが表示されます。
gcc v 4.1.2 を使用しています。gcc v 4.4 を使用している場合、実際にはエラーは発生しませんが、その理由はわかりません。私のリンカーは次のとおりです。
ubuntu - ldリンケージの問題:/ usr / bin / ld:[libraryname]が見つかりません
Qmakeを使用してUbuntu9.10で共有ライブラリを構築しています
この共有ライブラリ(A)は、別の共有ライブラリ(B)に依存しています。
プロジェクトBは正常にビルドされました。
プロジェクトAの.proファイルでは、私のLIBS変数は次のようになります。
(ライブラリのバージョンが異なるため、完全なshlib名を使用しました。)
いずれにせよ、プロジェクトAをビルドしようとすると、リンクの段階で壊れて、エラーメッセージが出力されます。
エラーメッセージから、ldがlibdatelibファイルを見つけることができないと文句を言っていると思ったので、手動で/ usr /lib/にコピーしました。
ただし、それでも問題は解決せず、同じエラーメッセージが表示されます。
誰もがこれを修正する方法を知っていますか?
[編集]
私はgccを使用してビルドするのはまったく新しいです。シンボリックリンクを作成する方法は知っていますが、lnkコマンドにどのパスを使用しますか?リンクしたいファイルは/home/ username / work / cppdev / datelib/binにあります。
また、私が使用しているビルドシステム(qmake)は、ビルドの一部としてシンボリックリンクを自動的に作成するため、/ home / username / work / cppdev / datelib/binフォルダーに次のファイルが既にあります。
- libdatelib_release.so(シンボリックリンク)
- libdatelib_release.so.1(シンボリックリンク)
- libdatelib_release.so.1.0(シンボリックリンク)
- libdatelib_release.so.1.0.0(共有ライブラリ)
シンボリックリンクが非常に多い理由(ポイントは何ですか?)と、共有ライブラリに直接リンクできないのにシンボリックリンクを経由する必要がある理由を説明するために、別の質問をする必要があるかもしれません。私はいくつかのオンラインドキュメントを読みましたが、これまでに見たものは、実際の技術的な理由ではなく、ディクタム/伝統のように見えます。Linuxでリンクするときにこのレベルの抽象化が必要な理由。