• 締切済み

Unsatisfied code symbol エラーについて

UNIX上でcのプログラムを作成しています。 OSはHP-UX B.11.23 U ia64 (td)です。 共有ライブラリ(~.sl)を作成したのですが、 これを実行モジュール(a.out)にリンクしてコンパイルして、a.outを実行すると、 エラーになってしまいます。 エラーの内容は、 /usr/lib/hpux64/dld.so: Unsatisfied code symbol 'xxxxx' in load module '/.../...~/a.out'. というもので、ライブラリ内にあるはずのxxxxxをa.outで使用しているのですが、 これが見つからないというエラーのように思えます。 ライブラリ内にはいくつか関数を用意していて、そのほかの関数は普通に使えています。 ライブラリを作成するときにincludeファイルを用意していますが、 その中でexternで関数の宣言をしていて、 xxxxxが他の関数と異なった設定をしているとは思えません。 このような場合、エラーの原因としてどのようなことが考えられるでしょうか? ほとほと困っています…。 どなたか解決方法をご教授願います。 またライブラリに含まれる関数を表示させるUNIXコマンドってありましたでしょうか? もしご存知でしたらあわせて教えていただけると助かります。 何か必要な情報で書き足りないものがありましたら、補足いたしますのでご指摘ください。 よろしくお願いいたします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

最後だけ: nm でライブラリ内のシンボルが全部わかるんじゃなかったかな. まあ, 関数だけではないんだけど.

wizard-mam
質問者

お礼

自己レスです。すみません。 nmでno symbolになってしまうのは、makeファイルで、 コンパイルした後にstripをかけてしまっていたからでした。 これを外したらnmで情報が表示されました。 しかし表示された中にxxxxxも含まれていて、他の使える関数と同様にちゃんとGLOBにもなっていたんですが、やはりエラーになるのは変わりません。 根本的に解決していないので、まだまだアドバイスお願いします。

wizard-mam
質問者

補足

早速の回答ありがとうございます。 エラーが発生するライブラリに対してnmはやってみたのですが、 "no symbols"と表示されてしまうのです。 作成したのは共通関数ライブラリなのですが、 正常に機能している関数もあるのに…です。 nmに表示させるためにコンパイル時にオプションとか必要だったりするんでしょうか? 質問ばかりですみません。何かご存知でしたら追加回答お願いいたします…。

関連するQ&A

  • HP-UXでImageMagick起動時にエラー

    HP-UX11.23(Itanium2)でImageMagick-6.2.4をインストール後、convert機能を利用してPostScriptファイルをJPEGに変換したいのですが、convertを実行すると以下のようなエラーメッセージが出力され、上手くいきません。 > /usr/lib/hpux32/dld.so: Unsatisfied code symbol '__udivsi3' in load module '/usr > /local/lib/hpux32/libMagick.so'. このようなエラーの場合、どのような原因が考えられるのでしょうか? ちなみに、インストールは以下のサイトよりdepotファイルをダウンロードし、行っております。『Run-time dependencies』に挙げられているものも全てインストールしましたが、エラーは変わりませんでした。 http://hpux.connect.org.uk/hppd/hpux/X11/Viewers/ImageMagick-6.2.4/ よろしくお願い致します。

  • Pro*Cのリンクエラーがどうにもならないですっ!!

    こんにちわ。 UNIXのC++でPro*Cを使って動的SQLを使ったプログラムを作っています。 プログラムコードは出来上がっていて、単独コンパイルは通るのですが、 実行形式のプログラムを作る時のリンクで「未定義のシンボル」として 以下の4ライブラリ関数がエラーになります。 sqlald()関数、sqlprc()関数、sqlnul()関数、sqlclu()関数 これはおそらく、リンクする際にこれらの関数が含まれているライブラリを リンクできていないだけなのではないかと思っているのですが、 肝心のライブラリがどこのどれなのかがわかりません。 どなたかご存知の方がいらっしゃいましたら、教えてください。 もしかして、プログラム中でもこれらの関数をextern する以外に 何か必要なのでしょうか? PS.教えてgooのプログラミング→C/C++のカテゴリにも質問させていただいて  います。   でもわからないので、誰か助けて~!!という感じです!!

  • Pro*Cで動的SQLを実現する為のライブラリ関数はどのファイルに入っているのでしょうか?

    こんにちわ。 UNIXのC++でPro*Cを使って動的SQLを使ったプログラムを作っています。 プログラムコードは出来上がっていて、単独コンパイルは通るのですが、 実行形式のプログラムを作る時のリンクで「未定義のシンボル」として 以下の4ライブラリ関数がエラーになります。 sqlald()関数、sqlprc()関数、sqlnul()関数、sqlclu()関数 これはおそらく、リンクする際にこれらの関数が含まれているライブラリを リンクできていないだけなのではないかと思っているのですが、 肝心のライブラリがどこのどれなのかがわかりません。 どなたかご存知の方がいらっしゃいましたら、教えてください。 もしかして、プログラム中でもこれらの関数をextern する以外に 何か必要なのでしょうか?

  • シンボル名の再定義のためにコンパイルエラー

    Motifのヘッダー(Aとする)にMax(a,b)というdefineがあり、そのヘッダーの(恐らく)後にincludeしている某クラスライブラリのヘッダー(Bとする)の関数定義にMax(a,b)というのがあります。 そのため、B中のMaxでは、Aのdefineが展開されてしまい、コンパイルエラーになってしまいます。 どちらのヘッダーも修正するわけにはいかないのですが、includeの順番を変えようにも、どこでincludeされているのか調査するのも難航しています。 何か回避策、もしくは解析するのに便利なツールなどご存知でしたら教えてください。 なお、開発環境はUNIX(正しくはAIX)です。

  • error LNK2001: 外部シンボル "_main" は未解決です

    VisualC++6.0で、新規作成→win32 Dinamic-Link Libraryでプロジェクト を作成し、dllファイルを作っています。 今までは、上手くコンパイル出来て、dllを作れていました。 友人の作ったライブラリにリンクして、ソースファイルで そのライブラリの関数を使って、コンパイルすると、 LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です。 というエラーが出て困っています。 今、プロジェクトの設定→リンク→アウトプットの エントリポイントシンボルはDllEntryPoint@12となっています。 どうしたら良いでしょうか? どなたかご教授くださると助かります。 ちなみに、ライブラリの関数をコメントにすると、コンパイル出来ます。

  • PHPからのライブラリ関数コール

    あちこち検索したのですが、うまくヒットしません。 Linuxにて作成したC言語のダイナミックリンクライブラリ(xxxxx.so)の関数をPHPから実行することは可能でしょうか。実現可能であれば、PHP側ではどのような手順が必要ですか。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 外部ライブラリのロード中にエラーが発生しました

    OracleでDLLの関数を使用したいのですが、 タイトルのようなエラーメッセージが出てしまいます。 以下のような手順を踏みました。 (1)Listener.ora/TnsNames.oraの確認 (2)Libraryの作成  CREATE OR REPLACE LIBRARY HARU AS 'C:\test\haru.dll'/ (3)Packageの作成  FUNCTION F_HARU_CALL (haha IN BINARY_INTEGER,ruru OUT VARCHAR2) RETURN BINARY_INTEGER; (4)Package Bodyの作成  FUNCTION F_HARU_CALL (haha IN BINARY_INTEGER,ruru OUT VARCHAR2) RETURN BINARY_INTEGER IS EXTERNAL LIBRARY HARU NAME "F_HARU" LANGUAGE C CALLING STANDARD C; Object Browserで(4)を確認実行したところ タイトルのようなメッセージが出ました。 (4)をCALLする前後にデバッグ文を書いたのですが、 例外エラーのようで、後の方のデバッグ文は実行されませんでした。 解決策のアドバイスをよろしくお願い致します。

  • system関数のエラー検出

    UNIXのmanで調べたところ、system関数(コマンド)はエラー時、-1をかえし、errnoに"EAGAIN","EINTR","ENOMEN"を代入するようなのですが、 実際にプログラムにくみこんでみると、1を返しているようです。 (systemで実行するコマンド名をわざと間違えて実行しています。) これでは、systemで実行しようとしているコマンドが1を返しているのか、systemでエラーが起きているのか判断できません。 どのように判定すればよいのでしょうか。

  • UNIX上のプログラムで使うライブラリの中身を知る方法

    過去にUNIX上で動作するプログラムを作成していて、その中で多数の.aや.so(標準では無く、オリジナルのもの。)を使っているのですが、.aや.so内にどのような関数があるのか、もしくはそのライブラリに関係するソース名は何か知る手段ってありませんか? かなり前のものなので、関数仕様書もmakefileも無いため、何をライブラリとしているのか分からず困っています。 駄目もとで、バイナリエディタで中身を確認してみたのですが、何処の情報がそれを示しているかいまいち分かりませんでした。

  • gccコンパイラのエラーについてstdin

    画像を変換するCプログラムを作成し、cygwinのgccでコンパイルしようとしたところ 以下のエラーが出て困っています。 $ gcc conv.c In file included from conv.c:24:0: conv.c: 関数 ‘main’ 内: conv.c:78:18: エラー: expected ‘)’ before ‘->’ token extern FILE *stdin; ^ conv.c:79:18: エラー: expected ‘)’ before ‘->’ token extern FILE *stdout; ^ conv.c:80:18: エラー: expected ‘)’ before ‘->’ token extern FILE *stderr; 24行目で、#include <stdio.h>を記述しております。 なにが原因でしょうか?

専門家に質問してみよう