在使用CMAKE 的過程中遇到了一個問題:在程序代碼中將自己的中間代碼編譯成一個靜態庫,提供給其它的幾個程序代碼時,總是找到這個庫。
愁了好久,終於在一個不起眼的小地方,發現了一個可能的問題。
在使用TARGET_LINK_LIBRARIES(<your program> <link lib name>)時,鏈接到安裝在/usr/local/lib/libprotobuf.a 時使用兩種書寫情況都OK。
TARGET_LINK_LIBRARIES(<your program> libprotobuf.a)
TARGET_LINK_LIBRARIES(<your program> protobuf)
但是鏈接到自己同一個工程下面的自己寫的靜態庫時,總是找不到庫。
TARGET_LINK_LIBRARIES(<your program> libmessage.a)
鏈接時會提示錯誤:
/usr/bin/ld: cannot find -lmessage
但是實際上我用另外的代碼直接鏈接卻是能夠鏈接成功,並且代碼也沒有寫得不對或者錯誤的地方。
然而將鏈接庫名字前面的lib 以及後面的 .a 去掉,即:
TARGET_LINK_LIBRARIES(<your program> message)
就能夠正常找到並鏈接該庫了。
具體的原因並不清楚,不過可以解決這個問題了。