मैं निम्नलिखित पुस्तकालय डोकर का उपयोग कर संकलित कर रहा हूँ:

https://github.com/hot-stuff/libhotstuff

निम्नलिखित स्क्रिप्ट का उपयोग करना:

FROM alpine:latest
RUN apk update
RUN apk add --no-cache git gcc g++ make cmake libuv-dev openssl-dev gmp-dev libsodium-dev autoconf
RUN git clone https://github.com/hot-stuff/libhotstuff.git && cd libhotstuff/ && git submodule update --init --recursive
RUN cd libhotstuff && cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED=ON -DHOTSTUFF_PROTO_LOG=ON && make

निम्नलिखित अपवाद के परिणामस्वरूप:

In file included from /libhotstuff/include/hotstuff/util.h:21,
                 from /libhotstuff/src/util.cpp:17:
/libhotstuff/salticidae/include/salticidae/util.h:244:20: error: field 't0' has incomplete type 'salticidae::timeval'
  244 |     struct timeval t0;
      |                    ^~
/libhotstuff/salticidae/include/salticidae/util.h:71:30: note: forward declaration of 'struct salticidae::timeval'
   71 | void sec2tv(double t, struct timeval &tv);
      |                              ^~~~~~~
make[2]: *** [CMakeFiles/hotstuff.dir/build.make:82: CMakeFiles/hotstuff.dir/src/util.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:289: CMakeFiles/hotstuff.dir/all] Error 2
make: *** [Makefile:149: all] Error 2

इस बीच मैं इसे अपनी मशीन और अन्य पर भी अच्छी तरह से चलाने में सक्षम हूं। (मैन्युअल रूप से डोकर के बाहर)

0
user2524707 1 फरवरी 2021, 16:37
यह अच्छा है कि आपने सटीक त्रुटियां पोस्ट की हैं (कई ऐसा करने में विफल हैं) लेकिन दुर्भाग्य से आपने कोई कोड पोस्ट नहीं किया है। कोड देखे बिना कोड त्रुटियों का निदान करना मुश्किल है। हालांकि इस मामले में मूल त्रुटि काफी स्पष्ट है, आपने util.h में सही हेडर शामिल नहीं किए हैं।
 – 
john
1 फरवरी 2021, 16:50
कोई कोड नहीं है, मैं मूल रूप से सिर्फ एक डॉकरीफाइल में एक पुस्तकालय को संकलित करने की कोशिश कर रहा हूं और यह विफल हो जाता है, इस बीच जब मैं इसे डॉकर संदर्भ के बाहर करता हूं तो यह मेरे लिए ठीक काम करता है। मैंने ऊपर जो डॉकर स्क्रिप्ट शामिल की है।
 – 
user2524707
1 फरवरी 2021, 16:51
2
शायद सबसे संभावित परिदृश्य यह है कि शामिल कोड किसी पर्यावरणीय कारक या अन्य के आधार पर आपके प्लेटफ़ॉर्म के बारे में कुछ गलत निष्कर्ष निकाल रहा है। तो फिर से इसे निर्धारित करने का एकमात्र तरीका कोड को देखना है।
 – 
john
1 फरवरी 2021, 16:58
1
@ user2524707: ठीक है, आपको पुस्तकालय की समस्या का सामना करना पड़ा है। यदि आप उस पुस्तकालय के आंतरिक भाग को नहीं जानते हैं और उन्हें जानना नहीं चाहते हैं, तो पुस्तकालय के डेवलपर्स को उचित बगट्रैकर में समस्या की रिपोर्ट करें। उस दृष्टिकोण में कुछ भी गलत नहीं है। हम (स्टैक ओवरफ़्लो) समस्या को ठीक करने में आपकी मदद कर सकते हैं, लेकिन केवल तभी जब आप इसे स्वयं ठीक करने का निर्णय लें। उस स्थिति में हम आपसे पुस्तकालय के बारे में अधिक जानकारी की अपेक्षा करते हैं और आपसे अधिक डिबगिंग प्रयासों को प्रदर्शित करने की अपेक्षा करते हैं।
 – 
Tsyvarev
1 फरवरी 2021, 17:08
1
खैर, मैं #include "salticidae/config.h" देख रहा हूं, संभवत: वह फ़ाइल जेनरेट की गई है। क्या यह आपके डॉकटर वातावरण के लिए सही ढंग से उत्पन्न हुआ है, या इसे किसी भिन्न वातावरण के लिए उत्पन्न किया गया है और फिर आपके डॉकटर वातावरण में कॉपी किया गया है? यही वह मुद्दा है जिसकी आपको जांच करनी चाहिए।
 – 
john
1 फरवरी 2021, 17:10

1 उत्तर

सबसे बढ़िया उत्तर

सी ++ आगे की घोषणा पर असफल हो रहा है - डोकर में चल रहा है

लिंक की गई स्रोत फ़ाइल util.h नहीं #include <sys/time.h> जो struct timeval के लिए आवश्यक है। दरअसल, पहचानकर्ता का अपूर्ण प्रकार है।

तकनीकी रूप से सी स्रोत में शामिल हैं extern "C" के अंदर शामिल करना बेहतर होगा, इसलिए पंक्ति 28 पर:

#ifdef __cplusplus     // POSIX headers should be inside extern "C"
extern "C" {           // but there are no actual platforms 
#endif                 // where this is needed, so anyway...
#include <getopt.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>  // add this for timeval
#ifdef __cplusplus
}
#endif

सौभाग्य से यह काम करना चाहिए।

इस बीच मैं इसे अपनी मशीन और अन्य पर भी अच्छी तरह से चलाने में सक्षम हूं।

सबसे अधिक संभावना है कि आप इसे glibc के साथ चलाने में सक्षम हो रहे हैं, जबकि alpine C मानक पुस्तकालय कार्यान्वयन के रूप में musl का उपयोग करता है। हो सकता है कि आप पुस्तकालय को पैच करने के काम से खुद को बचाना चाहें, क्योंकि आगे और असंगतताएं हो सकती हैं जिन्हें ठीक करने की आवश्यकता हो सकती है, और इससे पहले कि पुस्तकालय को musl के साथ काम करने के लिए अपस्ट्रीम पैच किया जाए, मैं सिर्फ एक संगत का उपयोग करने की सलाह दूंगा डॉकर छवि जो glibc का उपयोग करती है।

1
KamilCuk 1 फरवरी 2021, 17:34
धन्यवाद, क्या अल्पाइन का कोई विकल्प है जिसे आप इंगित करेंगे?
 – 
user2524707
1 फरवरी 2021, 17:51
उबंटू डेबियन सेंटोस। लोग आमतौर पर उसी वितरण का उपयोग करते हैं जिसका वे उपयोग कर रहे हैं।
 – 
KamilCuk
1 फरवरी 2021, 17:52