前言:
開發不規範,同事兩行淚
問題:
某位同事提供的公共庫是APP_TESTPUB.so,該如何去鏈接呢?
正文:
在gcc鏈接的過程中一般是使用-L用來指定動態庫存放路徑,可以是相對路徑,也可以是絕對路徑。-l用來表示鏈接那個動態庫或者靜態庫,同名優先鏈接靜態庫。
如下:
## 鏈接/home/test/lua/lua-5.3.5/lib/liblua-5.3.so
gcc test.c -I./incl -I./ -lxml2 -L/home/test/lua/lua-5.3.5/lib -llua-5.3 -o libtest.so -fPIC -shared
一般做法自己的庫如果需要別人鏈接的話,都要準守庫命名的原則以lib開頭,但是規範畢竟是規範,總有人不按照規範來,那麼碰到不規範的命名如:APP_TESTPUB.so 這樣的,我們怎麼辦呢?總不能站在那裏被人噴你很菜吧?
一種做法讓公共庫的開發改名字,當然存量系統的這麼改還是有風險的。還有一種就是將錯就錯的做法。
如下:
## 鏈接/home/test/lua/lua-5.3.5/lib/liblua-5.3.so
gcc test.c -I./incl -I./ -lxml2 /home/test/lua/lua-5.3.5/lib/liblua-5.3.so -o libtest.so -fPIC -shared
gcc test.c -I./incl -I./ -lxml2 /home/test/lua/lua-5.3.5/lib/APP_TESTPUB.so -o libtest.so -fPIC -shared
這種做法是直接去掉了-L和-l來實現不規範命名的庫鏈接。
結語
開發不規範,同事兩行淚