問題タブ [dynamic-library]
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 - C ++プログラムを共有ライブラリにコンパイルし、ACプログラムからロードする方法は?
私はcentos6でgnucコンパイラを使用しており、cプログラムはコード内の共有ライブラリを動的にロードします。
java - OS に応じて jar を動的にロードする
現在の OS のプラットフォーム依存ライブラリ jar を動的にロードする方法を見つけようとしています。JNI 呼び出しを使用するサードパーティ ライブラリにアクセスする必要があり、Mac と Windows 用に異なる jar があります。2 つのライブラリの呼び出しと戻りはすべて同一であり、コンパイル後に lib ディレクトリの jar ファイルを交換するだけで動作しますが、実行時にどの jar をロードする必要があるかをアプリで判断できるようにしたいと考えています。
ここで同様の投稿を見つけましたが、この質問に直接対処するものはありません。 この投稿は、ClassLoader を介して jar を動的にロードする方法を示していますが、私が収集したものから、このアプローチを使用してMethod method = clazz.getDeclaredMethod("methodName")
、method.invoke()
そのクラスによって提供されるメソッドを呼び出すだけでなく、クラスにロードされる各クラスを明示的に呼び出す必要があることを意味しますローダー(これは避けたいと思います)。
次のような解決策を見つけたいと思っています。
macos - MacOS の __dyld__dyld_start などの関数の詳細
MacOS では、そのようなスタックが表示されます (スタックの一番上に問題のコードのトラップがありますが、そこに到達する方法を理解したいと思います)。
関数 appLibInit::appLibInit は、コード内のグローバル オブジェクトの C++ コンストラクターであるため、おそらくリンクされているすべての共有ライブラリを処理している、ある種のプリメイン コードにいると推測しています (奇妙なことに、質問は、他の何かによって引きずり込まれない限り、私たちがリンクしていると期待するものではありません)。
Mac c++filt は、これらの __dyld プレフィックス付きシンボルをデコードしていないようです。
MacOS プロセスの起動シーケンスを説明しているドキュメントを知っている人はいますか?
macos - MacOS -- gcc/ld を使用して動的ライブラリを相対パスにリンクする方法
動的リンクを理解しようとしている場合、この質問は興味深いものになる可能性があります。
その質問に対する答えの 1 つは、動的ライブラリを作成して使用する素晴らしい例です。それに基づいて、いくつかの単純なファイルを作成します。
main.c:
mylibrary.c:
メイクファイル:
これまでのところ、すべてがうまく機能しています。make を実行し、コマンド プロンプトで ./main と入力すると、期待どおりの出力が表示されます。
さて、少し混ぜてみたいと思います。メイン ディレクトリのサブディレクトリである hidelib ディレクトリを作成しました。そして、makefile に次の 1 行を追加します。
ここで、makefile に別の行を追加して、hidelib サブディレクトリで libmylibrary.dylib を検出するようにします。./main も同じように実行できるようにしたいです。どうやってやるの?
編集:返信ありがとうございます。多くのオプションがあることは素晴らしいことですが、初心者は機能する具体的なオプションが 1 つだけ必要です。これが最後の行で私が試みていることですが、明らかに何かがわかりません。makefile はエラーなしで実行されますが、実行時に「ライブラリが見つかりません」と表示されます。
ios5 - iOSアプリにObjectiveGitライブラリを含める
ObjectieGitFramework.xcodeprojファイルを開くと、iOSスキームを正常に構築できるようになりました。しかし、たくさんの実験が必要でした。最初から始めましょう–私がそれをどのようにしたか。
私がしたこと:
まず、ObjectiveGitのフォークのクローンを作成しました。
Src:https ://github.com/libgit2/objective-git/pull/54
プロジェクトを開いてビルドすると、1つのエラーと1つの警告が発生します。警告を解決するために、Xcodeにプロジェクト設定を自動的に更新させました。
今、私はディレクトリに行き、cmakelibgit2
を使用してビルドします:
Src:https ://github.com/libgit2/libgit2
この結果は、とりわけ、libgit2.0.15.0.dylib
作成中のファイルになります。
それをXcodeにドラッグし、ObjectiveGitとiOSターゲットに追加します。次に、ObjectiveGit-iOSの[ビルドフェーズ]タブに移動して、次のようにします。
問題
この時点で、プロジェクトをビルドでき、を使用してプロジェクト内にクラスを正常に作成できましたObjectiveGit
。ただし、プロジェクトを別のプロジェクト内にドラッグしObjectiveGit-iOS
、ターゲット依存関係として追加libObjectiveGit-iOS.a
して追加すると、link binary with libraries
インポートできずObjectiveGit/ObjectiveGit.h
、他の奇妙なエラーが発生していました(下の画像を参照)。xcodeのライブラリについてはほとんど知らないので、なぜこれが機能しないのかまったくわかりません。
さて、これは私が一度受けたエラーですが、もうありません。私はそれを引き起こすために何をしていたのか分かりません。
アップデート
header search path
これを何かに追加すると、奇妙なことが起こります。その結果、ファイルは見つかりませんが、代わりに70の他のMach-oエラーが発生します。
`` `
c++ - ソース コードを変更せずに動的ライブラリ内のシンボルを非表示にする
リンクする必要があるクローズドソースのサードパーティ共有ライブラリがあります。残念ながら、サードパーティのライブラリの作成者は、エクスポートするシンボルを制限したり、すべてのシンボルをエクスポートしたりすることを気にしませんでした。サードパーティのライブラリは、コードで使用している一般的なライブラリの互換性のないバージョンを内部的に使用していますが、競合するシンボル (Google の protobuf ライブラリ) をエクスポートしています。これにより、protobuffer ライブラリ バージョン チェックでライブラリのコンパイル時バージョンと実行時バージョンに互換性がないことが検出されると、ランタイム エラーが発生します。サードパーティのライブラリで使用されているバージョンと一致する古いバージョンの protobufs 2.3 に戻すことで、問題を解決できます。ただし、protbuf 2.3 にはパフォーマンスの問題があり、私のアプリケーションでは使用できなくなります。コードで protobuf 2.4 を使用し、サードパーティ ライブラリで使用できるようにする方法が必要です。
so ファイルのみを指定して、内部で使用される protobuf v 2.3 ライブラリからシンボルをエクスポートしないサードパーティ ライブラリの新しいバージョンを生成する方法はありますか? ソースがあれば、もっと簡単な問題になるでしょう。objcopy や strip などのツールは、実際には動的シンボル テーブルを変更できないようです。私がこれまでに持っている唯一のアイデアは、呼び出しをサードパーティのライブラリ (おそらく dlopen で開く?) にリダイレクトすることによって、必要なシンボルのみをエクスポートする独自の shim ライブラリを作成することです。
より良い解決策はありますか?
linux - Linux上のlibgcc_s.so.1のマイナーバージョン
SLESSP1とUbuntu10.04では、にlibgcc_sのメジャーバージョンしかないことに気づきました/lib64
。ただし、RHEL 6.1では、ライブラリのマイナーバージョンに日付が追加されたマイナーバージョンを指すメジャーバージョンがあります。カスタマーサポートに提供しているマトリックスのマイナーバージョンが必要です。UbuntuとSLESの両方でlibgccのマイナーバージョンをどのように入手しますか?
c++ - 特定の機能によるプログラムのクラッシュを禁止できますか?
私はインタラクティブなコード学習システムを作りたいと思っています。ユーザー (通常は若いプログラマー) が 1 つの関数の内容を C++ 言語で記述し、それをサーバーに送信すると、動的ライブラリにコンパイルされ、メイン プログラムから呼び出されます。
プログラムは、指定されたパラメーターに応じて、関数が正しい答えを返すことを期待しています。
もちろん、セグメンテーション違反などのエラーを引き起こす子供もいます。(サーバーは Linux を使用しています)。
では、関数を終了するシグナルハンドラを作成できますか?
私が達成したいこと:
c - C ヘッダー ファイルと動的リンク エラー
動的にリンクされたライブラリを作成しました。唯一の問題は、メイン プログラムがヘッダー ファイルを認識しないことです。ヘッダー ファイルは、メイン プログラムとは別のフォルダーにあります。私も試し#include "myheader.h"
ました#include "/folder/dir/myheader.h"
これが私の.hの構成です
これまでのところ、このコードは機能します
次に、lib を にコピーしてから/usr/local/lib
、
そして私は得る
これが私のディレクトリ構造です:
directory1 ----------------folder1(メインプログラム.c)
directory1 ----------------folder2(myheader.h と pgm の関数)
すべてのコードを作成し、最終段階にいるので、正しい方向へのプッシュが役立ちます。