2017-06-11 20 views
4

私のアプリケーションをubuntuのリンクでどのように使うかを考えようとしています。私はコードをコンパイルし、それは特定のファイルへの相対パスを含んでいます。実行可能ファイルへのリンクを別のディレクトリに作成すると、これらのパスを使用することはできません。相対パスで動作するようにする方法がありますか(コード内で作成するか、リンクを作成するか)シンボリックリンクで実行可能な相対パスを使用する

おかげ

+0

リンクがそれに完全または相対パスを使用してアプリケーションを起動すると違いはありません。現在の作業ディレクトリは、アプリケーションの場所と同じではありません。 Unix OSでは、usersディレクトリの下または特定のフルパスのどこかに特定のファイルを持つのが普通ですが、詳細はUnix(のような)ファイルシステムのドキュメントを参照してください。 Big read:http://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html –

+0

シェルスクリプトを書くときに、別のディレクトリからシェルスクリプトを呼び出すときに同様の問題があります。 この問題は、コマンドを実行する前に、まずスクリプトディレクトリに変更することで解決します。 bashでは、引数0はスクリプトの名前です。 コンパイル済みのプログラムを使用しているので、これがどのように行われるのかよくわかりません。 おそらくこれが役に立ちます https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within – yosefrow

答えて

0

は、それはあなたが後にしている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 
$ 
関連する問題