[問題] 關於Static Library 觀念釐清
我是在windows 平台VC~~~
最近被問說...
我們抓到別人提供的static lib我們應該可以自己wrap一下做出自己的Mylib後 只需要
share MyLib給別人用就好了
我直接說抱歉做不到, 就算我包出MyLib 我還是要提供 所有我用到的static lib給第三
者使用
觀念有誤, 這句話我不是很有自信
舉個例子
LibA.lib裡面只有一個method
int LibA(){ return 123;}
Build LibA完全沒問題產生出來後
LibB.lib 裡面 只有一個method寫
int LibA();
int LibB(){return LibA();}
這邊有兩個方式
1. 我原本認知是你在build LibB時 並不需要給他真正的LibA.lib 也就是不用看到LibA
的定義
產生出來的LibB.lib
2. 沒想到我試著讓他看到LibA的定義, 也就是在LibB中先加入LibA.lib然後build
1和2 產生出來的LibB.lib檔案大小差很多, 可想而知2一定比較大....
這邊讓我很懷疑....難道真的可以包別人的code而做出自己的嗎?
於是我寫一個MyApp.exe
裡面用到LibB.lib的method
用1方式build出來的, 一定要給LibA和LibB 給MyApp使用....
但用2方式build出來的, 我覺得"好像"不用給LibA.lib也可以的樣子於是build看看
卻出現了
Error 1 error LNK2011: precompiled object not linked in; image may not run
\MyApp\LibB.lib(LibA.obj) MyApp
我試著dump symbol看一下
第1種出來的libB 裡面只有
___@@_PchSym_@00@UfhvihUqznvhOdxPxsvmtUwlxfnvmghUerhfzoLhgfwrlLBBUkilqvxghUoryyUoryyUwvyftUhgwzucOlyq@BB55BB3035AACD8E
?LibB@@YAHXZ
當然他怎麼會mangling成這樣我毫無頭緒...
第2種出來的會有
?LibA@@YAHXZ
___@@_PchSym_@00@UfhvihUqznvhOdxPxsvmtUwlxfnvmghUerhfzoLhgfwrlLBBUkilqvxghUoryyUoryyUwvyftUhgwzucOlyq@BB55BB3035AACD8E
?LibB@@YAHXZ
奇妙的跑出了LibA這symbol...
我的疑問是
1. 是不是我自己build設定問題導致我產生precompiled object not linked in; image
may not run 的error?
2. 是不是真的可以code包code, 我抓到一個網路上要求要license的static lib, 我只要
wrap一層變成我自己的就很難被抓包了?
3. 還是說本來就不可能可以code包code, 那1和2兩種build方式差別到底在哪裡~~ ...有
什麼use case需要用這兩種build法
毫無頭緒....煩請各位解惑了
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.58.205
→
05/14 16:19, , 1F
05/14 16:19, 1F
推
05/14 16:47, , 2F
05/14 16:47, 2F
→
05/14 16:57, , 3F
05/14 16:57, 3F
→
05/14 17:03, , 4F
05/14 17:03, 4F
推
05/14 23:35, , 5F
05/14 23:35, 5F
→
05/15 10:19, , 6F
05/15 10:19, 6F
→
05/15 10:20, , 7F
05/15 10:20, 7F
→
05/15 10:20, , 8F
05/15 10:20, 8F
推
05/15 10:58, , 9F
05/15 10:58, 9F
→
05/15 11:17, , 10F
05/15 11:17, 10F
→
05/15 11:17, , 11F
05/15 11:17, 11F