mockcpp的so加載失敗問題

mockcpp的so加載失敗問題
 
1、先來看以前已解決的六個so沒法加載的問題。
 
把libmockcpp-ut-TestReturnObjectList.so拿來作例子研究so加載問題。
加載成功時的預處理後的.cpp,編譯產生的.o.sym/asm,最後的.so.sym
加載不成功時的一樣文件。
命令以下:
獲取預處理文件:
/usr/bin/c++ -Dmockcpp_ut_TestChainableMockMethod_EXPORTS -DPACKAGE_NAME=\"mockcpp\" -DPACKAGE_STRING=\"mockcpp\" -DPACKAGE_BUGREPORT=\"dev.mockcpp@gmail.com\" -DPACKAGE_URL=\"http://code.google.com/p/mockcpp\" -DPACKAGE=\"mockcpp\" -DVERSION=\"2.4\" -fPIC -I/home/jelly/Programming/mockcpp_svn_r/mockcpp/mockcpp/tests/3rdparty/testngpp/include -I/home/jelly/Programming/mockcpp_svn_r/mockcpp/mockcpp/tests/../3rdparty -I/home/jelly/Programming/mockcpp_svn_r/mockcpp/mockcpp/tests/../include -I/home/jelly/Programming/mockcpp_svn_r/mockcpp/mockcpp/tests/ut/. -o AAAAAA.d -E /home/jelly/Programming/mockcpp_svn_r/mockcpp/mockcpp/tests/ut/TestReturnObjectList.cpp
獲取反彙編文件:
objdump -D xxxx.o
獲取so的符號表:
nm -D xxx.so
 
一、預處理文件差別。
 
二、nm so文件差別。
 
根據上面狀況,已經能看出是result符號連接不到所致。也許編譯器認爲extern的一個const變量應該有一個變量實體與它對應。
由此,這個問題能夠修改以下:(把有差別的兩行代碼改成下面這樣)
const Any& result2 = Any();
return getResult(result2, resultProvider);
果真編譯連接經過,用例也都運行經過。
 
2、再來看TestApiHook.so加載不成功的問題。
 
它歷來都沒有被加載成功過,定位難度較大。
 
查找.o的方法:
jelly@jelly-linux:~/Programming/mockcpp/build_tests/ut/CMakeFiles/TestApiHook.dir$ find .. -name "TestApiHook.cpp.o"
../mockcpp-ut-TestApiHook.dir/TestApiHook.cpp.o
 
 
註釋掉兩行,加載成功,運行時段錯誤:
SETUP()
{
MOCKER(func)
.expects(once());
//.with(eq(a), eq(b))
//.will(returnValue(ret));
}
(TestApiHook)
./build.sh: line 18: 9062 段錯誤 ../../build_testngpp/src/runner/testngpp-runner $(ls *.so) -L"../../build_testngpp/src/listeners" -l"testngppstdoutlistener -c -f"
並且,偶然發現,下面有用例也用到with,will,怎麼SETUP中用到就加載失敗呢。
--------------------------------
比較下面一處with/will與上面的差別,只不過上面用了static const int 變量。
因而,把它們改成普通成員變量,果真加載成功了。但有段錯誤問題:./build.sh: line 18: 10109 段錯誤
--- tests/ut/TestApiHook.h (版本 434)
+++ tests/ut/TestApiHook.h (工做副本)
@@ -36,12 +36,15 @@

FIXTURE(ApiHook)
{
- static const int a = 3;
- static const int b = 5;
- static const int ret = 10;
+ int a;
+ int b;
+ int ret;

SETUP()
{
+ a = 3;
+ b = 5;
+ ret = 10;
MOCKER(func)
.expects(once())
.with(eq(a), eq(b))
-------------------------------------
如今就只是還有段錯誤問題。
相關文章
相關標籤/搜索