嗨,我正在使用 Swig 编写从 C++ 到 Tcl 的转换。编译很好,一切都很好,直到我加载生成的共享库。它给了我这样的错误。
无法加载文件“./Library.so”:./Library.so:未定义符号:_ZNK5boost13serialization13typeid_system27extended_type_info_typeid_012is_less_thanERKNS0_18extended_type_infoE
我检查了 boost,这个签名位于 boost/serialization/extended_type_info.hpp 中。但我已经将其添加到我的 Common.h 部分中,并将其包含在全文中。另外,我在编译期间添加了 -lboost_serialization 但问题并没有消失。奇怪的是我编写了一个 cpp 测试,它在 C++ 域中运行良好。我不知道发生了什么事。请帮忙吗?
谢谢你,
下面是我的 Common.h:
#ifndef COMMON_H_
#define COMMON_H_
#include <cstddef>
#include <typeinfo>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctime>
#include <map>
#include <set>
#include <boost/variant.hpp>
#include <memory>
#include <boost/system.hpp>
#include <boost/filesystem.hpp>
#include <boost/preprocessor.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/archive_exception.hpp>
#include <boost/serialization/export.hpp>
#include <boost/serialization/access.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/version.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/map.hpp>
#include <boost/serialization/variant.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/split_member.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/assume_abstract.hpp>
#include <boost/serialization/type_info_implementation.hpp>
#include <boost/serialization/config.hpp>
#include <boost/serialization/singleton.hpp>
#include <boost/serialization/extended_type_info.hpp>
#include <boost/serialization/extended_type_info_typeid.hpp>
#include <boost/config/abi_prefix.hpp>
#endif
有两种可能的解释。
首先是 Dll 是否未动态链接
libboost_serialization.so
(例如使用 -lboost_serialization
)。
第二个是如果运行时找到的动态库的版本与编译时使用的头文件不匹配。
您可以通过以下方式开始诊断此问题
ldd lib_my_tcl_module.so