ihraç etmeden statik iç kütüphaneye bağlamak bu yapıyla bir projesi var:CKağıt: Ona
/path/to/my/project
├── CMakeLists.txt
├── internal-libs
│ ├── internal-lib1
├── libs
│ ├── lib1
│ ├── lib2
lib1
statik bir kütüphanedir.
lib2
statik bir kütüphanedir.
internal-lib1
statik bir kütüphanedir. lib2, lib2 ve internal-lib1 dizinlerini bağlar. lib1
ve lib2
gönderilecek, ancak internal-lib1
geride bırakılacak. bağlantı için, ben var:
target_link_libraries(lib2 PRIVATE internal-lib1)
target_link_libraries(lib2 PRIVATE lib1)
Benim anlayış ben, statik ve özel bağlama çünkü iç-Lib1 ilgili tüm bilgiler lib2 içerdiği olacağını ve ben iç-Lib1 ihraç etmeye olmayacağını dış dünyaya.
Bir istemci programında kullanmaya çalıştığınızdaAncak, ben hata alıyorum : my oluşturulan İhracat yapılandırma dosyasında
/usr/bin/ld cannot find -llib-internal1
collect2: error: ld returned 1 exit status
, ben:
# Create imported target lib2
add_library(lib2 STATIC IMPORTED)
set_target_properties(lib2 PROPERTIES
INTERFACE_LINK_LIBRARIES "$<LINK_ONLY:lib1>;**$<LINK_ONLY:internal-lib1>**"
)
# Create imported target lib1
add_library(lib1 STATIC IMPORTED)
Ben yanlış anlama muyum statik bağlantı mı yoksa kurulumumda bir sorun mu var? Ben cmake 3.2.2 kullanıyorum. Bütün hedeflerim ÖZEL. Neden
INTERFACE_LINK_LIBRARIES
girişleri ve LINK_ONLY ne anlama geldiğini anlamıyorum.
p.s. Aslında lib1 ve lib2'nin paylaşımlı kütüphaneler olduğu düşünülüyordu, ancak statik sürümün basit bir şekilde çalışmasını sağlayamıyorum bile, burada açığa çıkarılabilen kütüphaneler için statik durumu açıklarım.
Teşekkür ederim. Basitçe statik kütüphaneler için kendi yöntemlerini düşündüğüm ama gereksiz yere karmaşık olduğunu düşündüğüm için burada [http://stackoverflow.com/a/11448878/4376555] denedim. Ancak, çözümünüzün daha da zor olduğunu düşünüyorum. – ShS