2014-01-06 47 views
3

我有h和.cpp文件:使用內聯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 

但是,如果我考.so文件下面.cpp文件 TEST.CPP:

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

編譯:

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

運行測試:

>test 
hello workd! 

我的Perl(v5.8.0)有什麼問題,或者我錯過了什麼嗎?

非常感謝!

+0

你'無效say_hi()解決'執行不進'的extern 「C」'... – Jarod42

+0

感謝Jarod42您的回覆,在現實生活中say_hi ()funcion可以是任何代碼風格,已經編譯成.so,我的理解只是在.h文件中,它需要聲明爲extern「C」,這就是爲什麼我的純調用test.cpp工作,問題是不與.so,但在perl內聯CPP我認爲。 – codesoar

+1

問題通過使用 解決'MYEXTLIB =>'/ full/path_to/libsay_hi.so'' 而不是 'LIBS =>「 - l ...」' 更多詳情請查看[這裏](http:// www .perlmonks.org /?node_id = 1069902) – codesoar

回答

0

問題通過使用MYEXTLIB => '/full/path_to/libsay_hi.so'代替LIBS=>"-l..."更多細節檢查here

+0

你應該在這裏提供更多細節。 – Puppy