फेडोरा गतिशील लिंकिंग पर ld-linux.so.2 द्वारा किया जाता है। डायनामिक लिंकर लाइब्रेरी फ़ाइलों को खोजने के लिए /etc/ld.so.cache और /etc/ld.so.preload का उपयोग करें।
सिस्टम को बताने के लिए ldconfig चलाएं जहां libfoo को libbar के लिए देखना चाहिए।
ldconfig/lib,/usr/lib और /etc/ld.so.conf में सूचीबद्ध किसी भी निर्देशिका में दिखता है। आप जांच सकते हैं कि कौन से पुस्तकालय एक प्रोग्राम ldd के साथ उपयोग करते हैं।
प्रत्येक विवरण के लिए मैन्युअल पृष्ठों पर अधिक जानकारी उपलब्ध है।
यहां साझा पुस्तकालयों का उपयोग करके एक एप्लिकेशन का एक उदाहरण दिया गया है।
Program.cc
#include "foo.h"
#include <iostream>
int main(int argc, char *argv[])
{
for (int i = 0; i < argc; ++i) {
std::cout << func_foo(argv[i]) << std::endl;
}
}
foo.h
#ifndef FOO_H
#define FOO_H
#include <string>
std::string func_foo(std::string const &);
#endif
foo.cc
#include "foo.h"
std::string func_foo(std::string const &arg)
{
return arg + "|" + __func__;
}
bar.h
#ifndef BAR_H
#define BAR_H
#include <string>
std::string func_bar();
#endif
bar.cc
#include "bar.h"
std::string func_bar()
{
return __func__;
}
libfoo.so के साथ साझा लाइब्रेरी के रूप में बनाएं।
जी ++ -Wall -Wextra -fPIC कमरा साझा foo.cc -ओ libfoo.so
जी ++ -lfoo -L./ -Wall -Wextra program.cc foo.h -ओ कार्यक्रम
ldd कार्यक्रम
...
libfoo.so => नहीं मिला
अद्यतन /etc/ld.so.cache
sudo ldconfig/घर/टोबियास/परियोजनाओं/स्टब्स/तो/
ldd कि गतिशील लिंकर पाता चलता libfoo.so
ldd प्रोग्राम
...
libfoo.so => /home/tobias/projects/stubs/so/libfoo.so (0x00007f0bb9f15000)
libfoo.so
न्यू foo.cc में libbar.so के लिए एक कॉल जोड़ें
#include "foo.h"
#include "bar.h"
std::string func_foo(std::string const &arg)
{
return arg + "|" + __func__ + "|" + func_bar();
}
libbar.so बिल्ड और libfoo.so
जी ++ -Wall -Wextra -fPIC कमरा साझा bar.cc -ओ libbar.so
जी ++ -Wall -Wextra -fPIC कमरा साझा libbar.so foo के पुनर्निर्माण .cc -o libfoo.so
ldd libfoo.so
...
libbar.so => नहीं मिला
ldd कार्यक्रम
...
libfoo.so => /home/tobias/projects/stubs/so/libfoo.so (0x00007f49236c7000)
libbar.so => नहीं मिला
यह दिखाता है कि गतिशील लिंकर अभी भी libfoo.so लेकिन libbar नहीं पाता है। तो
फिर से /etc/ld.so.cache अपडेट करें और पुनः जांचें।
sudo ldconfig/घर/टोबियास/परियोजनाओं/स्टब्स/तो/
ldd libfoo.so
...
libbar.so => /home/tobias/projects/stubs/so/libbar.so (0x00007f935e0bd000)
ldd कार्यक्रम
...
libfoo.so => /home/tobias/projects/stubs/so/libfoo.so (0x00007f2be4f11000)
libbar.so => / घर/टोबियास/परियोजनाओं/स्टब्स/तो/libbar.so (0x00007f2be4d0e000)
बी oth libfoo.so और libbar.so पाए जाते हैं।
नोट करें कि इस अंतिम चरण के आवेदन कार्यक्रम पर कोई प्रभाव नहीं पड़ता है। यदि आप वास्तव में सख्त चल रहे हैं ldconfig तरह का रिंकंकिंग है। अजीब या नहीं, लिंकर को पुस्तकालयों की निर्भरताओं को जानने की आवश्यकता है। इसे लागू करने के कई अन्य तरीके हैं लेकिन यह चुना गया था।
क्या आप एक न्यूनतम कॉन्फ़िगरेशन पोस्ट कर सकते हैं जो समस्या को पुन: उत्पन्न करता है? उनकी पोस्ट के बाद विटॉट की टिप्पणियां एक ही प्रक्रिया का वर्णन करती हैं और एक ही समस्या पर नहीं पहुंचती हैं। हो सकता है कि यदि आप सरल कदम उठाते हैं, तो हम सवाल का जवाब देने में मदद कर सकते हैं? –