使用内联C ++调用so文件中的函数不起作用

时间:2014-01-06 10:01:55

标签: c++ perl shared-libraries

我有.h和.cpp文件:

say_hi.h:

   extern "C" {
      void say_hi();
   }

say_hi.cpp:

   #include <cstdio>
   #include "say_hi.h"
   void say_hi(){
   printf("hello workd!\n");
   }

然后我用

编译它
g++ -I. -fPIC -c *.cpp
g++ -shared *.o -I. -olibsay_hi.so

然后使用perl内联CPP来调用它:

>perl -e 'use Inline CPP=>q{  \
 #include "say_hi.h" \
 void test(){return say_hi(); } \
 }, INC=>"-I.",LIBS=>"-lsay_hi"; test()'

我来了:

perl: symbol lookup error: /home/xxx/test_so/_Inline/lib/auto/e_8555/e_8555.so: undefined symbol: say_hi

但是,如果我使用下面的.cpp文件测试.so文件 TEST.CPP:

#include "say_hi.h"
main() {
  say_hi();
}

编译:

g++ -L. -lsay_hi test.cpp -o test

运行测试:

>test
hello workd!

我的Perl(v5.8.0)有什么问题,或者我错过了什么?

非常感谢!

1 个答案:

答案 0 :(得分:0)

使用MYEXTLIB => '/full/path_to/libsay_hi.so'代替LIBS=>"-l..."解决了问题更多详情检查here