में प्रतीकों को नहीं ढूंढ सकता है, मैं एक प्रोग्राम के लिए एक प्रकार का प्लगइन आर्किटेक्चर बनाने के साथ प्रयोग कर रहा हूं, और मेरे पहले प्रयास में मुझे कोई समस्या है। क्या साझा ऑब्जेक्ट के भीतर मुख्य निष्पादन योग्य से प्रतीकों तक पहुंच बनाना संभव है? मैंने सोचा था कि ठीक होगा निम्नलिखित:साझा ऑब्जेक्ट मुख्य बाइनरी, सी ++
testlib.cpp:
void foo();
void bar() __attribute__((constructor));
void bar(){ foo(); }
testexe.cpp:
g++ -fPIC -o testexe testexe.cpp -ldl
g++ --shared -fPIC -o testlib.so testlib.cpp
आउटपुट::
attempting to load
fail: ./testlib.so: undefined symbol: _Z3foov
#include <iostream>
#include <dlfcn.h>
using namespace std;
void foo()
{
cout << "dynamic library loaded" << endl;
}
int main()
{
cout << "attempting to load" << endl;
void* ret = dlopen("./testlib.so", RTLD_LAZY);
if(ret == NULL)
cout << "fail: " << dlerror() << endl;
else
cout << "success" << endl;
return 0;
}
साथ संकलित
तो जाहिर है, यह ठीक नहीं है। तो मुझे लगता है कि मेरे पास दो प्रश्न हैं: 1) क्या साझा ऑब्जेक्ट को 2 से लोड किए गए निष्पादन योग्य में प्रतीकों को खोजने का कोई तरीका है) यदि नहीं, तो प्लगइन का उपयोग करने वाले प्रोग्राम आमतौर पर काम करते हैं कि वे मनमाने ढंग से कोड प्राप्त करते हैं अपने कार्यक्रमों के अंदर चलाने के लिए साझा वस्तुओं?
हाँ! बहुत बहुत धन्यवाद। – cheshirekow
https://gcc.gnu.org/onlinedocs/gcc-4.8.3/gcc/Link-Options.html के अनुसार, जीसीसी लिंक चरण में "-गतिशील" विकल्प के साथ एक ही प्रभाव प्राप्त किया जा सकता है। –
@ टॉमबरॉन धन्यवाद! मैं अपनी पोस्ट अपडेट करूंगा। –