2010-04-26 20 views
5

Programımı, LSL C++ Derleyici ile Linux Standard Base http://www.linuxfoundation.org/collaborate/workgroups/lsb'dan oluşturmak istiyorum. Program gcc 4.4 sürümü ile oluşturulmuş Boost kütüphanesine bağlıdır. Derleme başarısız. Boost kütüphanesi LSB C++ Derleyici ile oluşturulabilir mi? Alternatif olarak, Boost kütüphanesinin bazı eski gcc sürümleriyle hangi versiyonun önerilebileceği mümkün müdür? Son hedefim, çoğu Linux dağıtımında çalıştırılabilir üçüncü parti Boost kitaplıklarımı almak.LSB C++ Derleyici ile Bina Yükseltme

Genellikle, Linux dağıtımları için daha iyi ikili uyumluluk elde etmek için, Boost kütüphanesine bağlı olarak C++ kapalı kaynak uygulama geliştirmek için ne yapılabilir?

+0

LSB ne zamandan beri bir derleyici? Sadece bir Linux dağıtımında hangi kütüphanelerin ve yardımcı programların kurulması ve mevcut olması gerektiğinin bir şartı olduğunu düşündüm (böylece diğer kütüphaneler ve yardımcı programlar orada bulunmalarına bağlı olabilir). –

+0

Michael Aaron Safyan: LSB projesi, GCC yerine kullanılabilecek ve tüm Linux dağıtımları ile uyumlu ikili üretecekleri kendi C++ derleyicilerini sunuyor. Aslında, bu derleyiciyi kendi kodum için kullanmak iyi sonuç verir. Ancak, projemde kullanılan üçüncü taraf kitaplıklarıyla ilgili sorun yaşıyorum. –

+0

@Michael, LSB bir dizi özelliktir, ancak çalışma grubu ayrıca bu özelliklere uyan programların geliştirilmesine yardımcı olan araçlar da sağlar. Burada http://ldn.linuxfoundation.org/lsb/porting-lsb-demo ve http://www.linuxfoundation.org/collaborate/workgroups/linux-standard-base-lsb/lsb-sdk-403 –

cevap

3

LSB C++ derleyici aslında bir derleyici değildir. lsbc++ yürütülebilir, sisteminizde yüklü olan GCC derleyicisinin etrafındaki sarıcıdır (gerçek derleyici, --lsb-cxx seçeneği ile denetlenebilir). Muhtemelen, yerel gcc derleyicisi yerine LSB sarıcısını çağırmak için destek oluşturma sistemine gireceksiniz.

Bu nedenle ortaya çıkabilecek sorunlar büyük olasılıkla LSB derleyicisinin dil yapılarını derleyememesidir, bunun yerine bazı bağlantı sorunları vardır. Örneğin, LSB derleyici, LSB'ye ait olmadıkça, kodun bağlantılı olduğu tüm paylaşılan kitaplıkları varsayılan olarak atar. Bu, BOOST'un bu tür kitaplıklara dayanması durumunda bağlantı hatalarına yol açabilir. Bu, LSBCC_SHAREDLIBS ortam değişkeni ile kontrol edilebilir, ancak bu lib'leri ürününüzle birlikte gönderdiğinizden emin olmalısınız.

Başka bir konu da LSB'nin GCC derleyici sürümlerinin gerisinde kalmasıdır (ve BOOST derleyicilerin tüm karanlık köşelerine girebilir). Bildiğim kadarıyla, GCC 4.4 yeterince test edilmedi, bu yüzden 4.3 derleyici ile denemelisiniz.

Ve Google, LSBCC ile bina artışıyla ilgili hiçbir şey bulamıyor. Bu nedenle, bunu yapmayı başarırsanız, lütfen, deneyiminizi, örneğin kendi sorunuzu kendi yanıtınız olarak paylaşın.

+0

lbb ++ 'ya bağlantı ile g + + dosyasını değiştiren Boost'u oluşturmaya çalıştım. Sonuç, birçok kütüphanenin derlenmesi başarısız oldu. GCC 4.3 sürümünü deneyeceğim, bu bilgiler için teşekkür ederim. –

+0

@Alex, Umarım bağlantıyı değiştirmeyle birlikte lsbC++ 'yi gerçek derleyiciye de işaret etmiş olursunuz, bu yüzden tekrarlamadı: -D. Her neyse, ayrıca LSB posta listesinde yardım almaya da çalışabilirsiniz: https://lists.linux-foundation.org/mailman/listinfo/lsb-discuss Posta listesi biçimi, StackOverflow'tan daha fazla hata kütüğü ile somut hataları tartışmak için daha uygundur . –

+0

GCC 4.3'ü kullanma yardımcı olmadı, hala üçüncü taraf kitaplıkları için lsbC++ derleyicisini kullanamıyorum. Ancak LSB Uygulama Denetleyicisi ile bazı sonuçlara sahibim. Paketime eksik kütüphaneler ekleyerek, Boost ASIO kütüphanesini kullanarak program için 49 adet 50 Linux dağılımı uyumluluğunu almayı başardım. Başarı çeşitliliği ... Yardımlarınız için teşekkür ederim. –

6
Geçenlerde o kimseye kullanım var olması durumunda, bunu yapmak diyoruz yaşadım

bu ben takip adımları şunlardır:

  • indirip bir sürümünü indirin LSB SDK
  • yüklemek boost ve/opt/boost/boost_ < sürüm > sürümüne ayıklama (1.43 kullanıyorum)
  • Libbz2-dev'in yüklü olduğundan emin olun.
cd /opt/boost/boost_<version> 
./bootstrap.sh --prefix=/opt/boost --without-libraries=python,mpi --without-icu 
  • Düzenleme /opt/boost/boost_<version>/project-config.jam ve dosyanın üstüne yakın hattını
using gcc : : /opt/lsb/bin/lsbc++ : <cflags>-U_GNU_SOURCE <cxxflags>-U_GNU_SOURCE ; 

eklemek ile

  • Bootstrap. Bjam'in konfigürasyonunu okuduğu diğer dosyalardan birinde bir kullanım bildiriminiz varsa bu durumun başarısız olacağını unutmayın, hangi dosyaları okuduğuna dair bir fikir edinmek için --debug-configuration'u geçebilirsiniz.

    • Run
    ./bjam cflags=-fPIC cxxflags=-fPIC linkflags=-fPIC install 
    

    Ben piton veya çalışma MPİ kütüphaneleri ya elde etmeye çalışmak, ne de yoğun bakım boost.regex kütüphane ile çalışma almak için çalıştım vermedi. İkincisi büyük olasılıkla LSU araç seti ile ICU kütüphanelerinin statik versiyonlarını oluşturmak durumundadır.

    32 bit Linux için -fPIC kesinlikle gerekli değildir, ancak statik kitaplıkları 64 bit Linux için paylaşılan bir kitaplığa bağlamak istiyorsanız gereklidir.

    Sonuç, /opt/boost/lib ikili dosyalarında ve /opt/boost/include numaralı başlıklarda olmalıdır, açıkçası kendi tercihlerinize göre öneki değiştirebilirsiniz. Tüm kodumuzu LSB'ye taşımadan önce yapacak çok miktarda işim var, bu yüzden sertifikasyon sürecinin ne kadar iyi ilerlediğini bildiremiyorum.

  • +0

    İlginç, teşekkürler. Şu anda ikili uyum sorunu çözmek için otomatik araçlar kullanıyorum. Cevabınızı gelecekte referans olarak alacağım. –