C++ Kütüphane Problemi

Başlatan ct, 07 Aralık 2010 - 18:21:45

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

ct

Çözüldü! Çok teşekkürler.

Merhaba, bir simulasyon programı aracılığıyla c++ kodunu çalıştırmaya çalışıyorum. Programın adı siconos. ilk başta çok daha fazla hata alıyordum ancak bağımlılıkları varmış onları kurup tekrar kurunca daha az hata almaya başladım.


scionos DiodeBridge.cpp

ile örnek bir uygulamayı derlemeye çalıştım aşağıdaki çıktıyı verdi:


|=============================================================================|
|          Siconos-Kernel version 3.1.0, Copyright INRIA 2005-2010.           |
|                                                                             |
|                 Free software under GNU General Public License.             |
|=============================================================================|

-- Configuring done
-- Generating done
-- Build files have been written to: /home/zanpakutou/.siconos
Linking CXX executable DiodeBridge
/usr/bin/ld: warning: libcppunit-1.12.so.0, needed by /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/libSiconosKernel.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libgfortran.so.2, needed by /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/libSiconosNumerics.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/libSiconosNumerics.so: undefined reference to `_gfortran_pow_r8_i4'
collect2: ld returned 1 exit status
make[2]: *** [DiodeBridge] Hata 1
make[1]: *** [CMakeFiles/DiodeBridge.dir/all] Hata 2
make: *** [all] Hata 2



sorunu -L ve  -l komutlarıyla çözmeye çalıştım
siconos DiodeBridge.cpp -L /usr/lib -l /usr/lib/libSiconosKernel.so


Hiçbir şey eklememişim gibi aynı hatayı verdi.

man sayfasına göre yaptığım çalışmalıydı bir şeyleri mi eksik yapıyorum acaba? Belki hata başka birşeyden kaynaklanıyordur.

man siconos özet çıktısı:



NAME
       siconos - Siconos C++ Compilation.

SYNOPSIS
       siconos  [  -a ] [ -build_dir DIRECTORY ] [ -clean_build ] [ -clean ] [
       -D KEY [=VALUE] ] [ -g ] [ -h | -help ] [ -L DIRECTORY ] [ -l LIBRARY ]
       [  -noexec  ]  [ -nocomp ] [ -opt C++ COMPILER OPTION ] [ -ldopt LINKER
       OPTION ] [ -P PREFIX COMMAND ]  [  -plugin_dir  PLUGIN  DIRECTORY  ]  [
       -plugins_dir  PLUGINS DIRECTORY ] [ -src_dir SOURCES DIRECTORY ] [ -v ]
       [ sample.cpp ] [ arguments ]



   -L     DIRECTORY
               Add a directory to the linker search list.

       -l     LIBRARY
               Link with a library.



Ek olarak aşağıdaki şekillerde de denedim ancak çalışmadı. Herkese iyi akşamlar.



siconos DiodeBridge.cpp -L'/usr/lib' -l '/usr/lib/libSiconosKernel.so'
siconos DiodeBridge.cpp -L /usr/lib -l /usr/lib/libSiconosKernel.so /usr/lib/libcppunit-1.12.so.1



eribol

siconos DiodeBridge.cpp -L /usr/lib -l /usr/lib/libSiconosKernel.soBoşluk olmaması gerekir diye biliyorumsiconos DiodeBridge.cpp -L/usr/lib -l/usr/lib/libSiconosKernel.so

sema

libgfortran.so.2 ile ilgili bir şeyler aradım ama zor biraz sanki, söylenen bir şeyler var ama.. Belki kütüphane eksikliğindendir.

Sinaptik'ten libgfortan paketini arayabilirsiniz, var mı yok mu bilmiyorum ama bir bakın.

Not: Yanıt gelmiş.
susema

ct

Hemen denedim olmadı aslında boşluklu tırnak işaretli bir çok şekilde denedim. Aşağıda man sayfasını ekledim. Aslında yaptığı herhangi bir derleyiciden farksız sadece bazı bağlantıları kendisi sağlıyor. cmake bağımlılıkları arasında vardı. Evet libgfortran'ı ve gfortranı kurmuştum

NAME
       siconos - Siconos C++ Compilation.

SYNOPSIS
       siconos  [  -a ] [ -build_dir DIRECTORY ] [ -clean_build ] [ -clean ] [
       -D KEY [=VALUE] ] [ -g ] [ -h | -help ] [ -L DIRECTORY ] [ -l LIBRARY ]
       [  -noexec  ]  [ -nocomp ] [ -opt C++ COMPILER OPTION ] [ -ldopt LINKER
       OPTION ] [ -P PREFIX COMMAND ]  [  -plugin_dir  PLUGIN  DIRECTORY  ]  [
       -plugins_dir  PLUGINS DIRECTORY ] [ -src_dir SOURCES DIRECTORY ] [ -v ]
       [ sample.cpp ] [ arguments ]

DESCRIPTION
       The siconos(1) command compiles, links and runs  a  Siconos  C++  input
       file.

       Siconos  is a free (GNU license) software, dedicated to modeling, simu‐
       lation and control of Non Smooth Dynamical Systems.

OPTIONS
       The following command-line options are recognized by siconos(1).
       -a
               Find and compile all sources files in sample.cpp
               directory.

       -build_dir
              DIRECTORY
               Compile inside specified directory. If /tmp,  temp  directories
              are created.

       -clean_build
               Clean build directory.

       -clean
               Clean the current directory (deletes binary files, etc.).

       -D     KEY [=VALUE]
               Define a 'cmake' and a 'cpp' variable.

       -g
               Compile with debug informations.

       -h     | -help
               Print help.

       -L     DIRECTORY
               Add a directory to the linker search list.

       -l     LIBRARY
               Link with a library.

       -noexec
               Do not run executable after compilation.

       -nocomp
               Do not compile executable before run.
       -opt   COMPILER OPTION
               Add option to compiler.

       -ldopt LINKER OPTION
               Add option to linker.

       -P     PREFIX COMMAND
               Run a prefix command (time, valgrind, gdb, etc.).

       -plugin_dir
              PLUGIN DIRECTORY
               Compile  a  plugin  with the sources under the specified plugin
              directory.
               The name of the compiled plugin is the name of  the  directory.
              The default is a directory named plugin.

       -plugins_dir
              PLUGINS DIRECTORY
               For  each  source file under the specified directory, compile a
              plugin. The default is a directory named plugins.

       -src_dir
              SOURCES DIRECTORY
               add all source files under the specified directory to the  com‐
              pilation of the executable.

       -v
               Print make(1) commands as they are executed.

EXAMPLES
        siconos -gv -P "time --format '%U'" BouncingBallTS.cpp

SEE ALSO
       The Siconos Software Documentation

       http://siconos.gforge.inria.fr/SiconosDocList.html



raspacı

#4
Programı anlatıldığı gibi kurdunuz mu zira bazı eksik kütüphanelerden bahsediyor hatada. Ubuntu için deb paketi varmış.
Four packages are available:

    * Siconos-Numerics: shared dynamic library that provides low-level algorithms (Fortran and C).

    * Siconos-Kernel: high level C++ classes and methods, main package of the software.

    * Siconos-Front-End: interfaces with "user-friendly" softwares, Scilab and Python
  Sırasıyla numerics, kernel ve front-end paketlerini kurman gerekiyormuş. Sendeki hatalar bu sırayla kurmamanla ilgili olabilir sanırım. http://siconos.gforge.inria.fr/InstallGuide/IG_install.html  . Şurada da bu 3 paket için deb paketleri var: https://gforge.inria.fr/frs/?group_id=9 
nereye gidersen git kendini de götürürsün.

ct

Kaldırıp tekrar kurdum aslında oradaki yöntemlere kurmuştum ama emin olmak istedim. Bağımlılığı olan paketleri tekrar kontrol ettim.

Sanırım sorun versiyonlarla alakalı. /usr/bin/ld: warning: libcppunit-1.12.so.0, libgfortran.so.2 istemiş ancak bende libcppunit-1.12.so.1 ile libgfortran.so.3 dosyaları var. Eski versiyonlarına bakacağım deb paketleri vardır belki.

eribol

Link versek? sudo ln -s /usr/lib/libcppunit-1.12.so.1 /usr/lib/libcppunit-1.12.so.0

ct

Çok güzel oldu valla :) debian'dan kurduğum eski pakettekinin adı değişikti çözemiyordum elle kursam işin içinden çıkamayacağım diye korkuyordum bir sürü bağlantısı çıkıyordu. Şimdi tek bir hata kaldı sayenizde.


-- Configuring done
-- Generating done
-- Build files have been written to: /home/zanpakutou/.siconos
Linking CXX executable DiodeBridge
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/libSiconosNumerics.so: undefined reference to `_gfortran_pow_r8_i4'
collect2: ld returned 1 exit status
make[2]: *** [DiodeBridge] Hata 1
make[1]: *** [CMakeFiles/DiodeBridge.dir/all] Hata 2
make: *** [all] Hata 2



heartsmagic

-L/usr/lib -lgfortran
ile bir dene.
Sorun sanırım gfortran sürümünden kaynaklanıyor.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

eribol

sudo ln -s /usr/lib/llibgfortran.so.2 /usr/lib/libgfortran.so.3Bu da fortran kütüphanesi için olabilir.

ct

Alıntı yapılan: heartsmagic - 07 Aralık 2010 - 21:03:52
-L/usr/lib -lgfortran
ile bir dene.
Sorun sanırım gfortran sürümünden kaynaklanıyor.

O şekilde çalışmadı sürümündeymiş. Şunu buldum:

Alıntı Yap
Anthony Stone wrote:
I have a big program, compiled with gfortran/gcc-4.4.1 (20090515), that uses the lapack/ATLAS library, also compiled with gfortran/gcc-4.4.1. I get unresolved references to _gfortran_pow_r8_i4 from lapack library routines. libgfortran.a contains _gfortran_pow_r8_i8 and _gfortran_pow_r8_i16 but not _gfortran_pow_r8_i4. Is this a bug, or am I doing something wrong?

You're doing something wrong, probably lapack was compiled with an older version of gfortran. The _gfortran_pow_r*_i4 symbols were removed from the library as of the 4.3 relase, IIRC. Since 4.3 gfortran instead generates calls to powi, powil, powif which are already available in the required GCC support library (libgcc). The benefit of this change is 1) bloat reduction 2) the middle-end of the compiler is aware of these functions and can potentially optimize usage of them better.

--
Janne Blomqvist

Alıntı yapılan: eribol - 07 Aralık 2010 - 21:25:14
sudo ln -s /usr/lib/llibgfortran.so.2 /usr/lib/libgfortran.so.3Bu da fortran kütüphanesi için olabilir.

http://gcc.gnu.org/ml/fortran/2009-05/msg00404.html

Bendeki sorun da `_gfortran_pow_r8_i4'ın bulunamamasıydı zaten.

Evet onu zaten en başında yaptım ve bir hatayı daha götürmüştü. Ancak sürüm sıkıntı, alıntıdaki gibi 4.3'de başlıyormuş. Daha önceki fortran sürümlerini kurup denemem gerekmekte diye düşünüyordum ki yazmayı bırakıp yüklemeye başladım.

Az önce bütün bağımlılıklarıyla gfortran-4.2'yi kurdum. Onun yanında multilib paketini de kurdum ne olur ne olmaz diye.
gcc'nin sitesinde liste olarak vermişler zaten. Gerikli bağımlılıklar da oradaydı kolayca kurdum:

http://ftp.debian.org/debian/pool/main/g/gcc-4.2/

Ve sonuç :)



|=============================================================================|
|          Siconos-Kernel version 3.1.0, Copyright INRIA 2005-2010.           |
|                                                                             |
|                 Free software under GNU General Public License.             |
|=============================================================================|

-- Configuring done
-- Generating done
-- Build files have been written to: /home/zanpakutou/.siconos
[100%] Built target DiodeBridge
[100%] Built target DiodeBridge
Install the project...
-- Install configuration: "Debug"
-- Up-to-date: /home/zanpakutou/DiodeBridge
====> Initialisation ...

---> End of initialization.
time = 0.3
Number of iterations done: 5000
Computation Time: 0.44



Herkese çok teşekkür ederim. Siz olmasanız asla çözemezdim yarım kalırdı herşey. Birazdan sorun çözüldü diye editleyeceğim başlığı.

Sigara bu anlar için var evet :)

heartsmagic

Ben de zaten bir sonraki aşama olarak gfortran sürümünü değiştirmeyi önerecektim, ancak daha az zahmetli yol belki işe yarar diye düşünmüştüm. Sen kendin gayet güzel bir şekilde çözmüşsün olayı.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.