2016-05-23 13 views
0

finde ich die C/C++ Treiber für cassandra gerade installiert und versucht, das einfache Programm von Beispielen Verzeichnis zu laufen, aber/usr/bin/ld: can not -lcassandra

ich nicht in der Lage bin, diesen Fehler zu beheben./Usr/bin/ld: -lcassandra


nicht hier mein cassandra finden:

[email protected]:~/connect_cassandra_cpp/cpp-driver/examples/simple# which cassandra 
/usr/sbin/cassandra 

Hier ist die CMakeLists.txt:

cmake_minimum_required(VERSION 2.6.4) 

set(PROJECT_NAME_STR cassandra) 
set(PROJECT_LIB_NAME ${PROJECT_NAME_STR}) 

set(PROJECT_LIB_NAME_TARGET ${PROJECT_LIB_NAME}) 

set(PROJECT_SOURCE_DIR /root/connect_cassandra_cpp/cpp-driver) 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ".") 
set(PROJECT_EXAMPLE_NAME simple) 

file(GLOB EXAMPLE_SRC_FILES ${PROJECT_SOURCE_DIR}/examples/simple/*.c) 

include_directories(${INCLUDES}) 

add_executable(${PROJECT_EXAMPLE_NAME} ${EXAMPLE_SRC_FILES}) 

target_link_libraries(${PROJECT_EXAMPLE_NAME} ${PROJECT_LIB_NAME_TARGET} ${CASS_LIBS}) 

set_property(TARGET ${PROJECT_EXAMPLE_NAME} APPEND PROPERTY COMPILE_FLAGS ${EXAMPLE_C_FLAGS}) 

Hier sind automatisch erzeugte Dateibefehle:

[email protected]:~/connect_cassandra_cpp/cpp-driver/examples/simple# make --just-print 

/usr/bin/cmake -H/root/connect_cassandra_cpp/cpp-driver/examples/simple -B/root/connect_cassandra_cpp/cpp-driver/examples/simple --check-build-system 
CMakeFiles/Makefile.cmake 0 

/usr/bin/cmake -E cmake_progress_start /root/connect_cassandra_cpp /cpp-driver/examples/simple/CMakeFiles /root/connect_cassandra_cpp/cpp-driver/examples/simple/CMakeFiles/progress.marks 

make -f CMakeFiles/Makefile2 all 

make -f CMakeFiles/simple.dir/build.make CMakeFiles/simple.dir/depend 

cd /root/connect_cassandra_cpp/cpp-driver/examples/simple && /usr/bin/cmake -E 

cmake_depends "Unix Makefiles" /root/connect_cassandra_cpp/cpp-driver/examples/simple /root/connect_cassandra_cpp/cpp-driver/examples/simple 
/root/connect_cassandra_cpp/cpp-driver/examples/simple /root/connect_cassandra_cpp/cpp-driver/examples/simple /root/connect_cassandra_cpp/cpp-driver/examples/simple/CMakeFiles/simple.dir/DependInfo.cmake --color= 

make -f CMakeFiles/simple.dir/build.make CMakeFiles/simple.dir/build 
/usr/bin/cmake -E cmake_echo_color --switch= --red --bold "Linking C executable simple" 

/usr/bin/cmake -E cmake_link_script CMakeFiles/simple.dir/link.txt --verbose= 

/usr/bin/cmake -E cmake_progress_report /root/connect_cassandra_cpp/cpp-driver/examples/simple/CMakeFiles 1 

echo "Built target simple" 

/usr/bin/cmake -E cmake_progress_start /root/connect_cassandra_cpp/cpp-driver/examples/simple/CMakeFiles 0 
___ 

Vollausgabefehler:

[email protected]:~/connect_cassandra_cpp/cpp-driver/examples/simple# make 

-- Configuring done 

-- Generating done 

-- Build files have been written to: /root/connect_cassandra_cpp/cpp-driver/examples/simple 

Linking C executable simple 

/usr/bin/ld: cannot find -lcassandra 

collect2: error: ld returned 1 exit status 

CMakeFiles/simple.dir/build.make:85: recipe for target 'simple' failed 

make[2]: *** [simple] Error 1 

CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/simple.dir/all' failed 

make[1]: *** [CMakeFiles/simple.dir/all] Error 2 

Makefile:75: recipe for target 'all' failed 

make: *** [all] Error 2enter code here 

Bearbeiten auf die Frage: Cassandra Installations Ausgang:

[email protected]:~# sudo -E apt-get install cassandra 
    Reading package lists... Done 
    Building dependency tree 
    Reading state information... Done 
    cassandra is already the newest version. 
    The following packages were automatically installed and are no longer required: 
    fonts-dejavu-extra libatk-wrapper-java libatk-wrapper-java-jni libgif4 libgnomevfs2-0 libgnomevfs2-common libice-dev libntdb1 libpthread-stubs0-dev libsctp1 libsm-dev libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev libxt-dev lksctp-tools python-ntdb tzdata-java x11proto-core-dev x11proto-input dev x11proto-kb-dev xorg-sgml-doctools xtrans-dev 
    Use 'apt-get autoremove' to remove them. 
    0 upgraded, 0 newly installed, 0 to remove and 15 not upgraded. 

    [email protected]:~# sudo -E apt-get install cassandra-devel 
    Reading package lists... Done 
    Building dependency tree 
    Reading state information... Done 
    E: Unable to locate package cassandra-devel 
    [email protected]:~# 
+0

Ich weiß nicht, diese "Bibliothek", aber wenn es unter sbin ist und nicht vor "lib" (zB libcassandra), es ist eine ausführbare Datei, keine Bibliothek. Wenn Sie nicht sicher sind, versuchen Sie "file/usr/sbin/cassandra". Wenn "ELF 32-bit LSB executable" oder ähnlich lautet, handelt es sich um eine ausführbare Datei. Übrigens können Sie cmake anweisen, nach Bibliotheken mit LINK_DIRECTORIES (dir/to/lib) zu suchen. – kamshi

+0

Es ist eine ausführbare Datei. Die Versuchsdatei/usr/sbin/cassandra gibt die Ausgabe /usr/sbin/cassandra aus: POSIX-Shell-Skript, ASCII-Text ausführbar. Ich bin mir nicht sicher, welche Bibliotheken es braucht. –

+0

kamshi, bedenken Sie, dass die Linie ld: nicht finden kann -l cassandra schlägt libcassandra vor.Wenn also das Programm ld lib + $ libname + .so string innerhalb der lib-Ordner sucht, kann es diese lib nicht finden. neelam, die Datei in/usr/sbin/cassandra ist wahrscheinlich natürlich das Shell-Skript, das das Programm startet, aber wenn Sie versuchen, ein Beispiel zu kompilieren, ist die lib und die Header, die Sie brauchen, das Programm ist in der Regel nur ein Client "Wenn ich eine solche Verbindung benutzen darf. versuche den devel Teil des Treibers zu installieren, normalerweise ist dies das (sehr häufige) Problem (auf jedem Linux). –

Antwort

2

Ich bin an der Readme dieses Projekt suchen und es scheint, dass Sie den Kodex geklont Abschnitt https://github.com/datastax/cpp-driver/blob/master/README.md, aber Sie werden auch die ausführbaren Dateien benötigen. Unter den ausführbaren Dateien gibt es Treiber und Treiber-Dev, und die Installation des Treiber-dev.deb-Pakets würde Ihnen die 1. Header-Dateien 2. Shared-Bibliotheken liefern, die der Compiler nicht finden kann. Im Allgemeinen sagt Ihnen Ihr Compiler, dass er libcassandra.so nicht in den Verzeichnissen/usr/lib oder usr/lib64 finden kann. Dies ist normalerweise der Fall, wenn Sie den Treiber installieren, aber vergessen haben, das Treiber-devel-Paket zu installieren. Hier wird das Entwickler-Paket http://downloads.datastax.com/cpp-driver/ubuntu/ oder wenn Sie apt get-installiert cassandra mit mit so etwas wie

apt-get install cassandra 

versuchen, die Entwick Teil mit

apt-get install cassandra-devel 

EDIT erhalten:

Schließlich bin ich manuell kompiliert und installiert den Treiber von der Quelle und dann kompiliert die Beispiele/einfach wie die anderen Lösungen (intalling cassandra-cpp-driver.rpm) nicht solv ed den ganzen Thread. Tun Sie das einfach:

git clone https://github.com/datastax/cpp-driver.git 
cd cpp-driver 
mkdir build 
cd build 
cmake .. 
make 
sudo make install 
cd ../examples/simple 
gcc simple.c -L /usr/local/lib64 -l cassandra -I /usr/local/include -o simple.o 

Arbeitete für mich. Auf der anderen Seite könnten Sie innerhalb von/usr/lib64/und cassandra.h innerhalb von/usr/include nach libcassandra.so (einige verrückte Erweiterungen) suchen. Wenn es nur einen symbolischen Link /usr/lib64/libcassandra.so zu /usr/lib64/libcassandra.so.(etwas verrückte Erweiterung) und kompilieren

+0

Miro, siehe Bearbeitungen. Ich bekomme E: Das Paket cassandra-devel konnte nicht gefunden werden. Wenn ich dlevel Paket von Ihrem Link herunterlade, welches Verzeichnis zu –

+0

Hi kopiert werden soll, wird die Antwort aktualisiert, wie man das Beispiel kompiliert. Ich sehe keinen Grund, nicht in diesem Fall zu arbeiten, viel Glück –

+0

Danke für Ihre Zeit. Mir fehlte make install. Es funktioniert jetzt. Ich schätze, es gibt einen Tippfehler "mach einen symbolischen Link /usr/lib64/libcassandra.so nach /usr/lib64/libcassandra.so". genau dieselbe Datei? –

Verwandte Themen