4
私のアプリケーションをubuntuのリンクでどのように使うかを考えようとしています。私はコードをコンパイルし、それは特定のファイルへの相対パスを含んでいます。実行可能ファイルへのリンクを別のディレクトリに作成すると、これらのパスを使用することはできません。相対パスで動作するようにする方法がありますか(コード内で作成するか、リンクを作成するか)シンボリックリンクで実行可能な相対パスを使用する
おかげ
私のアプリケーションをubuntuのリンクでどのように使うかを考えようとしています。私はコードをコンパイルし、それは特定のファイルへの相対パスを含んでいます。実行可能ファイルへのリンクを別のディレクトリに作成すると、これらのパスを使用することはできません。相対パスで動作するようにする方法がありますか(コード内で作成するか、リンクを作成するか)シンボリックリンクで実行可能な相対パスを使用する
おかげ
は、それはあなたが後にしているrealpath
ですか?このような何か(以下の例ではtest
のソース):
#include <iostream>
#include <cstdlib>
int main(int argc, char *argv[])
{
char *path = realpath(argv[0], NULL);
std::cout << path << '\n';
free(path);
return 0;
}
例の実行:
$ ln -s tmp/test
$ ./test
/home/mlil/tmp/test
$
リンクがそれに完全または相対パスを使用してアプリケーションを起動すると違いはありません。現在の作業ディレクトリは、アプリケーションの場所と同じではありません。 Unix OSでは、usersディレクトリの下または特定のフルパスのどこかに特定のファイルを持つのが普通ですが、詳細はUnix(のような)ファイルシステムのドキュメントを参照してください。 Big read:http://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html –
シェルスクリプトを書くときに、別のディレクトリからシェルスクリプトを呼び出すときに同様の問題があります。 この問題は、コマンドを実行する前に、まずスクリプトディレクトリに変更することで解決します。 bashでは、引数0はスクリプトの名前です。 コンパイル済みのプログラムを使用しているので、これがどのように行われるのかよくわかりません。 おそらくこれが役に立ちます https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within – yosefrow