0

これは私を困惑させています...私は次のようなコードを持っています:

#include <stdio.h>
#include <pbs_ifl.h>

int doSomeStuff()
{
    char *server_name;
    int c;

    server_name = pbs_default();

    c = pbs_connect(server_name);
    printf("pbs_errno %d\n",pbs_errno);

    // do some stuff

    pbs_disconnect(c);
}

私がそれをコンパイルすると:

gcc -static -o executablename sourcefile.c -ltorque

「-static」でコンパイルすると、問題なく動作します。pbs_errno は 0 で、自分の仕事をすることができます。

しかし、「-static」フラグを削除すると、実行時に次のメッセージが表示され始めます。

munge: Error: Unable to access "/var/run/munge/munge.socket.2": No such file or directory

それで... munge サービス (munged) を開始すると、それについて不平を言うのをやめますが、代わりに pbs_errno=15033 を取得し、クラスターから何も取得できません (自分のことを行います)。

何か案は?

4

1 に答える 1

0

質問を削除するか、回答するかはわかりませんが、解決したようです...ので、ここに解決策を投稿します。

libの2つのバージョンがインストールされていました。1つはyum経由で、もう1つはソース経由です。コンパイルされたコードのみが静的ライブラリを持っていたので、-static をリンクしているときは gcc がコンパイル済みコードとリンクしていて、動的をリンクしているときは yum バージョンとリンクしていました。

必要に応じて、次のフラグを追加して、適切なライブラリとのリンクを強制する必要がありました。

-Wl,-rpath=/usr/local/lib
于 2014-06-02T15:37:42.303 に答える