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)有什麼問題,或者我錯過了什麼嗎?
非常感謝!
你'無效say_hi()解決'執行不進'的extern 「C」'... – Jarod42
感謝Jarod42您的回覆,在現實生活中say_hi ()funcion可以是任何代碼風格,已經編譯成.so,我的理解只是在.h文件中,它需要聲明爲extern「C」,這就是爲什麼我的純調用test.cpp工作,問題是不與.so,但在perl內聯CPP我認爲。 – codesoar
問題通過使用 解決'MYEXTLIB =>'/ full/path_to/libsay_hi.so'' 而不是 'LIBS =>「 - l ...」' 更多詳情請查看[這裏](http:// www .perlmonks.org /?node_id = 1069902) – codesoar