.soファイルを作成し、main.cppファイルが.soファイルから関数を呼び出せるようにします。についてLinuxの.soファイルはmain.cppファイルにリンクできません
これは私のファイルです。
//aa.h
#include <stdio.h>
#include <stdlib.h>
void hello();
//hola.c
#include <stdio.h>
#include "aa.h"
void hello()
{printf("Hello world!\n");}
//main.cpp
#include "aa.h"
void hello();
int main(){hello();return 0;}
これは、以下のステップです。
ステップ1:作成する.soファイル
$ gcc hola.c -fPIC -shared -o libhola.so
それが動作
ステップ2:MAIN.CPPするlibhola.soをリンクし、テスト
$ gcc main.cpp -L. -lhola -o test
と呼ばれる実行ファイルを作成しますちょうど私が何を試したか2つのステップ。
、エラーが言う:
main.cpp:(.text+0x12): undefined reference to `hello()'
collect2: error: ld returned 1 exit status
Iは、/ usr/libにlibhola.soを移動して、/ usr/incluedのが、動作しないためにaa.hを移動することが試みられていました。
私は右だ場合は、ヘッダファイルを '#ifndefのSOME_NAME の#define SOME_NAME が含まれている必要があり//は #1 endif' – Shravan40
は、C++言語は、戻り値の型とパラメータの型を含めるために、すべての関数名を狂わせる何かをします。 C言語はそれをしません。 'gcc'コンパイラはC++コードをコンパイル/リンクするためのものではありません。代わりに 'g ++'や 'gpp'を使います。ライブラリの関数 'hello'を扱うためのC++メインプログラムを入手するには、ライブラリのヘッダーファイルに、' hello'関数のプロトタイプを囲む '#ifdef cplusplus {....}が必要です。 'hello'のプロトタイプはヘッダファイルにありますので、' main.c'ファイルでそのプロトタイプを繰り返さないでください。 – user3629249
cmd promptから 'ldconfig'を呼び出してください。また、 'ldconfig -p | grep "hola" 'は結果を返します。 – sameerkn