تجميع كود C ++ مع مكتبة BOST الرقمية الملزمة لحل الفأس = B النظام الخطي
-
11-09-2019 - |
سؤال
انا استخدم ارتباطات مكتبة رقمية لتعزيز UBLAS لحل نظام خطي بسيط:
#include<boost/numeric/ublas/matrix.hpp>
#include<boost/numeric/ublas/io.hpp>
#include<boost/numeric/bindings/traits/ublas_matrix.hpp>
#include<boost/numeric/bindings/lapack/gesv.hpp>
#include <boost/numeric/bindings/traits/ublas_vector2.hpp>
namespace ublas = boost::numeric::ublas;
namespace lapack= boost::numeric::bindings::lapack;
int main()
{
ublas::matrix<float,ublas::column_major> A(3,3);
ublas::vector<float> b(3);
for(unsigned i=0;i < A.size1();i++)
for(unsigned j =0;j < A.size2();j++)
{
std::cout << "enter element "<<i << j << std::endl;
std::cin >> A(i,j);
}
std::cout << A << std::endl;
b(0) = 21; b(1) = 1; b(2) = 17;
lapack::gesv(A,b);
std::cout << b << std::endl;
return 0;
}
حاولت تجميعها مع الأمر التالي:
g++ -I/home/foolb/.boost/include/boost-1_38 -I/home/foolb/.boostnumbind/include/boost-numeric-bindings solve_Axb_byhand.cc -o solve_Axb_byhand
ولكن تفشل مع الخطأ التالي:
/media/disk/tmp/ccbd973l.o: In function `boost::numeric::bindings::lapack::detail::gesv(int, int, float*, int, int*, float*, int, int*)':
solve_Axb_byhand2.cc:(.text._ZN5boost7numeric8bindings6lapack6detail4gesvEiiPfiPiS4_iS5_[boost::numeric::bindings::lapack::detail::gesv(int, int, float*, int, int*, float*, int, int*)]+0x59): undefined reference to `sgesv_'
collect2: ld returned 1 exit status
ما الخطأ في نهجي في التعليمات البرمجية؟
المحلول
Sgesv_ هو رمز من مكتبة Lapack، عليك ربط ذلك. UBLAS فقط يرتبط به أعتقد.
أنا أيضا لا أعرف اسم المكتبة على الرغم من :)
نصائح أخرى
آسف إذا كانت هذه طريقة خارج المسار، لكنني لا أستطيع رؤيتك ترتبط في مكتبات دفعة في أمر G ++ الخاص بك. أراك بما في ذلك مسارات البحث، ولكن لا يوجد إدراج صريح لمكتبات التعزيز المترجمة نفسها؛ شيء مثل -LBoost (أخشى أنني لا أعرف التنسيق الدقيق الذي تحتاجه، وقد يعتمد ذلك على المواقع).
عند الارتباط بزيادة مكتبة ربط الرقمية، يمكنك الارتباط بالمعلمة
-Lpath/to/lapack -llapack -Lpath/to/blas -lblas -lgfortran
في دول مجلس التعاون الخليجي
-Lpath/to/lapack -llapack -Lpath/to/blas -lblas -lg2c
في دول مجلس التعاون الخليجي
لا تنتمي إلى StackOverflow