現在のソースを使用してasmコードから共有ライブラリをコンパイルする

現在のソースを使用してasmコードから共有ライブラリをコンパイルする

私はasmでいくつかの基本機能を作成し、共有ライブラリでコンパイルしました。良い:

BITS 64
            global foo
            section .text
foo:
            mov rax, 1
            ret

私は以下をコンパイルしました:

nasm -f elf64 foo.S -o foo.o && gcc -shared foo.o -o libfoo.so

主なテストがあります。

#include <stdio.h>
int foo();

int main()
{
  printf("%d\n", foo());
  return (0);
}

foo.oで直接コンパイルすると、すべてがうまくいきます。しかし、次のようにコンパイルすると:

gcc main.c -L. -lfoo

次のエラーが発生します。

/usr/.../bin/ld: warning: type and size of dynamic symbol `foo' are not defined

私はプロトタイプが宣言されていないので、私はそのようなことを知りました。

elfファイルの他の部分を完成させる必要がありますか?

ありがとうございます。

ベストアンサー1

foo記号が次に対応することを指定する必要があります。機能:

[BITS 64]
            global foo:function
            section .text
foo:
            mov rax, 1
            ret

おすすめ記事