Bu gece bir moron gibi hissettiğimi söyleyerek başlayacağım. Kuvvetlendirme Serileştirme ile RHEL5.6, gcc 4.1.2, 1.44.0 desteği altında sahip olduğum bir iş sorununu minimum düzeyde yeniden üretmeye çalışıyorum.Ubuntu 12/Boost Serileştirmesini bağlayan Çözülmemiş Semboller 12.10
çevre ben ile bu sorunu yaşıyorum, gcc 4.7.2 ve boost 1.44.0 bir yapı (sistem derleyici karşı, paketler, vs) (dev yüklü paketleri ile) Ubuntu Server.
Kodum düzgün bir şekilde derleniyor, ancak çeşitli boost::archive
türleriyle ilgili çok sayıda tanımsız sembol alıyorum.
668 43569 stat("/usr/local/boost/1.44.0/lib/libboost_serialization.so", {st_mode=S_IFREG|0755, st_size=700481, ...}) = 0
669 43569 open("/usr/local/boost/1.44.0/lib/libboost_serialization.so", O_RDONLY) = 8
Benim Makefile geçerli:: Ben alıyorum bağlayıcı hataları
default: test-app
all: test-app
BOOST := /usr/local/boost/1.44.0
CPPFLAGS := -fPIC -Wall -Wextra -Werror
INCDIRS := -isystem$(BOOST)/include
.LIBDIRS. := $(BOOST)/lib
.LIBS. :=boost_serialization
LIBS := $(foreach lib,$(.LIBS.),-l$(lib))
LIBDIRS := $(foreach dir,$(.LIBDIRS.),-L$(dir))
CPPFLAGS += $(INCDIRS)
base.o : base.cpp base.hpp
g++ $(CPPFLAGS) --compile $< -o [email protected] -g
derived.o : derived.cpp base.hpp derived.hpp
g++ $(CPPFLAGS) --compile $< -o $@ -g
main.o: main.cpp derived.hpp
g++ $(CPPFLAGS) --compile $< -o [email protected] -g
test-app: main.o derived.o base.o
g++ -o [email protected] $(LIBDIRS) $(LIBS) $^
clean:
rm -f *.o test
A (çok) küçük bir örnek gibi benim hissetmez strace Koşu, ben beklenen boost_serialization kütüphanesi toplayıp bkz :
base.o: fonksiyonda
void boost::archive::basic_text_oprimitive<std::ostream>::save<boost::archive::class_id_reference_type>(boost::archive::class_id_reference_type const&)': /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
boost :: arşiv :: archive_exception :: archive_exception (artırmak :: arşiv :: archive_exception :: exception_code, karakter const *, karakter const *)' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: tanımsız başvuru içinboost::archive::archive_exception::~archive_exception()' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
boost :: arşivi :: archive_exception :: ~ archive_exception()' base.o: olarak işlevvoid boost::archive::basic_text_oprimitive<std::ostream>::save<boost::archive::tracking_type>(boost::archive::tracking_type const&)': /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
boost :: archive :: archive_exception :: archive_exception (boost :: arşiv :: arşiv_exception :: exception_code, char const *, char const *) ' /usr/local/boost/1.44.0/include/boost/ arşiv/basic_text_oprimitive.hpp: 91: tanımsız başvuru içinboost::archive::archive_exception::~archive_exception()' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
boost :: arşivi :: archive_exception :: ~ archive_exception()' base.o: işlevivoid boost::archive::basic_text_oprimitive<std::ostream>::save<unsigned int>(unsigned int const&)': /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
boost :: arşivi :: archive_exception :: archive_exception (boost :: arşiv :: archive_exception :: exception_code, char const *, char const *) ' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: tanımsız başvuru içinboost::archive::archive_exception::~archive_exception()' /usr/local/boost/1.44.0/include/boost/archive/basic_text_oprimitive.hpp:91: undefined reference to
boost :: archive :: archive_exception :: ~objdump -t /usr/local/boost/1.44.0/: Ben başvurulan .bu yıllardan bir sembol dökümü yaparsanız
Aynı şekilde archive_exception()', ben gerekli sembolleri bakın lib/libboost_serialization.so | C++ filtreler | grep "artırmak :: arşiv :: archive_exception :: ~ archive_exception()" 000000000004e670 gr F .text 0000000000000065
boost :: arşiv :: archive_exception :: ~ archive_exception() için 000000000004e6e0 gr F .text 0000000000000009 sanal thunk artırmak :: arşivi :: archive_exception :: ~ archive_exception() 000000000004e6f0 g kadar F .text 0000000000000012
boost :: arşivi :: archive_exception :: ~ archive_exception() 000000000004ed60 g kadar F .text 000000000000005c
boost :: arşivi :: archive_exception :: ~ archive_exception() 000000000004e710 g F.Metin 0000000000000009 sanal thunk artırmak için :: arşiv :: archive_exception :: ~ archive_exception()
Ben bir süre için şimdi masanın karşı başımı vurarak oldum ... Birisi yardımcı olabilir umuduyla. Belirli bir kaynağın önemli olduğunu düşünmüyorum, ancak istenirse yayınlayabilirim.
Ek çevresel ayrıntıları:
gr ++ version g ++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. Bu bir serbest yazılımdır ; Kopyalama koşulları için kaynağına bakın. Hiçbir garanti yoktur; SATILABİLİRLİK veya BELİRLİ BİR AMACA UYGUNLUK İÇİN BAŞKA DEĞİL.
ld --version GNU ld (GNU Binutils for Ubuntu) 2.22.90.20120924 Copyright 2012 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty.
Ayrıca, bu bunu konularla burada sanmıyorum, ancak Windows 8'de Hyper-V altında çalışan bir VM üzerindedir.
tam bağlantı hattı: g ++ -L/usr/yerel/boost/1.44.0/lib -lboost_serialization -o test uygulama main.o derived.o base.o
Sadece/usr/local gelen boost kütüphanelerinin kümesinden olabilir sorunları izole etmek çözmek gerekir kütüphaneler ve/usr/lib ve/usr/lerdeki başlıklar yerine orada başarıyla derler? – Tuxdude
"make" çalışmakta olan gerçek bağlantı komutunu yapıştırın. –
@ n.m. yukarıda bitti. Bu: g ++ -L/usr/local/boost/1.44.0/lib -lboost_serialization -o test-app main.o türetilmiş.o base.o –