क्या होता है
जब मैं पर ट्यूटोरियल का अनुसरण करते हुए एक Eigen::Vector3f
को std::vector
में जोड़ने का प्रयास करता हूं Eigen वेबसाइट इस तरह:
#include <Eigen/Core>
#include <Eigen/StdVector>
#include <iostream>
template <class EigenT>
using EigenStdVector = std::vector<EigenT, Eigen::aligned_allocator<EigenT>>;
int main() {
EigenStdVector<Eigen::Vector3f> vec;
vec.emplace_back(1.0f, 1.0f, 1.0f);
std::cerr << vec.back().transpose() << std::endl;
return 0;
}
मुझे निम्नलिखित चेतावनी मिलती है:
In file included from /usr/include/eigen3/Eigen/Core:349:0,
from /home/igor/Code/eigen_example/example.cpp:3:
In function ‘void* Eigen::internal::aligned_malloc(std::size_t)’,
inlined from ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {float, float, float}; _Tp = Eigen::Matrix<float, 3, 1>; _Alloc = Eigen::aligned_allocator<Eigen::Matrix<float, 3, 1> >]’ at /usr/include/eigen3/Eigen/src/Core/util/Memory.h:742:76:
/usr/include/eigen3/Eigen/src/Core/util/Memory.h:159:12: warning: argument 1 value ‘18446744073709551612’ exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
result = std::malloc(size);
कैसे पुन: पेश करें
मैं उबंटू 18.04 पर हूं और मैंने Eigen 3.3.4 इंस्टॉल किया हुआ है।
आप इस प्रश्न में निम्न आदेश के साथ कोड बना सकते हैं यदि आपके पास निम्न आदेश के साथ Eigen स्थापित है:
g++ -I/usr/include/eigen3 -O3 example.cpp
क्या चेतावनी ट्रिगर करता है
- चेतावनी केवल
Vector2f
,Vector3f
, आदि का उपयोग करते समय दिखाई देती है। यहMatrix2f
,Matrix3f
, आदि जैसे प्रकारों के लिए नहीं दिखाई जाती है। - चेतावनी तब दिखाई जाती है जब मेरे पास
-O[1-3]
सक्षम होता है और-O0
के साथ ऐसा नहीं होता है
आगे की जानकारी:
यह सवाल ए> संबंधित प्रतीत होता है, लेकिन मुझे नहीं लगता कि यह मेरी मदद कैसे कर सकता है।
मैंने उन सभी के लिए एक छोटा सा उदाहरण बनाया है जो एक रेडी-टू-रन उदाहरण चाहते हैं। आप इसे मेरे GitHub पर पा सकते हैं।
क्या किसी के पास कोई विचार है कि यहां क्या गलत हो सकता है?
1 उत्तर
फ़ाइल Eigen/src/Core/util/Memory.h
में Eigen::aligned_allocator
के कार्यान्वयन में ये पंक्तियाँ पाई जा सकती हैं:
#if EIGEN_COMP_GNUC_STRICT && EIGEN_GNUC_AT_LEAST(7,0)
// In gcc std::allocator::max_size() is bugged making gcc triggers a warning:
// eigen/Eigen/src/Core/util/Memory.h:189:12: warning: argument 1 value '18446744073709551612' exceeds maximum object size 9223372036854775807
// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87544
size_type max_size() const {
return (std::numeric_limits<std::ptrdiff_t>::max)()/sizeof(T);
}
#endif
तो, ऐसा लगता है कि यह इस GCC बग से जुड़ा है।
जहां तक मैं देख सकता हूं, इसे ठीक करने वाली प्रतिबद्ध 2018-10-07 को दिखाई दी , और Eigen 3.3.6 में उपलब्ध होना चाहिए।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।