xcy793012053 2025-01-17 14:44 采纳率: 25%
浏览 20

KMC软件【tbenavi1/KMC】安装报错

大家好,我想使用【用k-mer分析进行基因组调查:(四)用GenomeScope评估基因组特征】这篇文章里提到的smudge_pairs功能。发现需要安装另外一个KMC软件【tbenavi1/KMC】。该软件不能用conda直接安装,所以我从git hub上把它下载后【git clone https://github.com/tbenavi1/KMC.git 】用make命令安装,但是提示如下错误,不知道应该怎么解决【备注:我是在自己创建的环境中进行操作的】

g++ -lm -static -O3 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -st
d=c++11 -o bin/kmc kmer_counter/kmer_counter.o kmer_counter/mmer.o kmer_counter/mem_disk_file.o kmer_counter/rev_byte.o kmer_counter/bkb_writer.o kmer_counter/cpu_info.o kmer_counter/bkb_reader.o kmer_counter/fastq_reader.o kmer_counter/timer.o kmer_counter/develop.o kmer_counter/kb_completer.o kmer_counter/kb_storer.o kmer_counter/kmer.o kmer_counter/splitter.o kmer_counter/kb_collector.o kmer_counter/raduls_sse2.o kmer_counter/raduls_sse41.o kmer_counter/raduls_avx2.o kmer_counter/raduls_avx.o kmer_counter/libs/libz.a kmer_counter/libs/libbz2.a
mkdir -p bin
g++ -lm -static -O3 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -std=c++11 -o bin/kmc_dump kmc_dump/kmc_dump.o kmc_dump/nc_utils.o kmc_api/mmer.o kmc_api/kmc_file.o kmc_api/kmer_api.o
mkdir -p bin
g++ -lm -static -O3 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -std=c++14 -o bin/kmc_tools kmc_tools/kmc_header.o kmc_tools/kmc_tools.o kmc_tools/nc_utils.o kmc_tools/parameters_parser.o kmc_tools/parser.o kmc_tools/tokenizer.o kmc_tools/fastq_filter.o kmc_tools/fastq_reader.o kmc_tools/fastq_writer.o kmc_tools/percent_progress.o kmc_api/mmer.o kmc_api/kmc_file.o kmc_api/kmer_api.o kmc_tools/libs/libz.a kmc_tools/libs/libbz2.a
mkdir -p bin
g++ -fPIC -Wall -shared -std=c++11 -O3 py_kmc_api/py_kmc_api.cpp py_kmc_api/kmc_file.o py_kmc_api/kmer_api.o py_kmc_api/mmer.o \
-I kmc_api \
-I py_kmc_api/libs/pybind11/include \
-I `python3 -c "import sysconfig;print(sysconfig.get_paths()['include'])"` \
-o bin/py_kmc_api`python3-config --extension-suffix`
In file included from py_kmc_api/libs/pybind11/include/pybind11/cast.h:16:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
py_kmc_api/libs/pybind11/include/pybind11/detail/internals.h: In function ‘pybind11::detail::internals& pybind11::detail::get_internals()’:
py_kmc_api/libs/pybind11/include/pybind11/detail/internals.h:200:28: warning: ‘void PyEval_InitThreads()’ is deprecated [-Wdeprecated-declarations]
         PyEval_InitThreads();
                            ^
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:95:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/ceval.h:132:37: note: declared here
 Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void);
                                     ^~~~~~~~~~~~~~~~~~
In file included from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
py_kmc_api/libs/pybind11/include/pybind11/cast.h: In function ‘std::__cxx11::string pybind11::detail::error_string()’:
py_kmc_api/libs/pybind11/include/pybind11/cast.h:442:36: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
                 "  " + handle(frame->f_code->co_filename).cast<std::string>() +
                                    ^~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
In file included from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
py_kmc_api/libs/pybind11/include/pybind11/cast.h:442:75: error: expected primary-expression before ‘>’ token
                 "  " + handle(frame->f_code->co_filename).cast<std::string>() +
                                                                           ^
py_kmc_api/libs/pybind11/include/pybind11/cast.h:442:77: error: expected primary-expression before ‘)’ token
                 "  " + handle(frame->f_code->co_filename).cast<std::string>() +
                                                                             ^
py_kmc_api/libs/pybind11/include/pybind11/cast.h:444:29: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
                 handle(frame->f_code->co_name).cast<std::string>() + "\n";
                             ^~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
In file included from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
py_kmc_api/libs/pybind11/include/pybind11/cast.h:444:64: error: expected primary-expression before ‘>’ token
                 handle(frame->f_code->co_name).cast<std::string>() + "\n";
                                                                ^
py_kmc_api/libs/pybind11/include/pybind11/cast.h:444:66: error: expected primary-expression before ‘)’ token
                 handle(frame->f_code->co_name).cast<std::string>() + "\n";
                                                                  ^
py_kmc_api/libs/pybind11/include/pybind11/cast.h:445:26: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
             frame = frame->f_back;
                          ^~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
In file included from py_kmc_api/py_kmc_api.cpp:1:0:
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h: In function ‘pybind11::function pybind11::get_type_overload(const void*, const pybind11::detail::type_info*, const char*)’:
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2021:49: error: ‘PyThreadState {aka struct _ts}’ has no member named ‘frame’; did you mean ‘cframe’?
     PyFrameObject *frame = PyThreadState_Get()->frame;
                                                 ^~~~~
                                                 cframe
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2022:41: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
     if (frame && (std::string) str(frame->f_code->co_name) == name &&
                                         ^~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
In file included from py_kmc_api/py_kmc_api.cpp:1:0:
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2023:14: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
         frame->f_code->co_argcount > 0) {
              ^~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
In file included from py_kmc_api/py_kmc_api.cpp:1:0:
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2026:18: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
             frame->f_locals, PyTuple_GET_ITEM(frame->f_code->co_varnames, 0));
                  ^~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:35:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2026:52: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
             frame->f_locals, PyTuple_GET_ITEM(frame->f_code->co_varnames, 0));
                                                    ^
/home/ug1102/.conda/envs/test/include/python3.12/tupleobject.h:27:18: note: in expansion of macro ‘PyType_FastSubclass’
                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
                  ^~~~~~~~~~~~~~~~~~~
/home/ug1102/.conda/envs/test/include/python3.12/object.h:194:28: note: in expansion of macro ‘_Py_CAST’
 #define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
                            ^~~~~~~~
/home/ug1102/.conda/envs/test/include/python3.12/object.h:223:31: note: in expansion of macro ‘_PyObject_CAST’
 #  define Py_TYPE(ob) Py_TYPE(_PyObject_CAST(ob))
                               ^~~~~~~~~~~~~~
/home/ug1102/.conda/envs/test/include/python3.12/tupleobject.h:27:38: note: in expansion of macro ‘Py_TYPE’
                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
                                      ^~~~~~~
/home/ug1102/.conda/envs/test/include/python3.12/cpython/tupleobject.h:18:13: note: in expansion of macro ‘PyTuple_Check’
     (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
             ^~~~~~~~~~~~~
/home/ug1102/.conda/envs/test/include/python3.12/cpython/tupleobject.h:28:38: note: in expansion of macro ‘_PyTuple_CAST’
 #define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
                                      ^~~~~~~~~~~~~
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2026:30: note: in expansion of macro ‘PyTuple_GET_ITEM’
             frame->f_locals, PyTuple_GET_ITEM(frame->f_code->co_varnames, 0));
                              ^~~~~~~~~~~~~~~~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:38:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2026:52: error: invalid use of incomplete type ‘PyFrameObject {aka struct _frame}’
             frame->f_locals, PyTuple_GET_ITEM(frame->f_code->co_varnames, 0));
                                                    ^
/home/ug1102/.conda/envs/test/include/python3.12/pyport.h:24:38: note: in definition of macro ‘_Py_CAST’
 #define _Py_CAST(type, expr) ((type)(expr))
                                      ^~~~
/home/ug1102/.conda/envs/test/include/python3.12/cpython/tupleobject.h:28:38: note: in expansion of macro ‘_PyTuple_CAST’
 #define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
                                      ^~~~~~~~~~~~~
py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:2026:30: note: in expansion of macro ‘PyTuple_GET_ITEM’
             frame->f_locals, PyTuple_GET_ITEM(frame->f_code->co_varnames, 0));
                              ^~~~~~~~~~~~~~~~
In file included from /home/ug1102/.conda/envs/test/include/python3.12/Python.h:42:0,
                 from py_kmc_api/libs/pybind11/include/pybind11/detail/common.h:112,
                 from py_kmc_api/libs/pybind11/include/pybind11/pytypes.h:12,
                 from py_kmc_api/libs/pybind11/include/pybind11/cast.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/attr.h:13,
                 from py_kmc_api/libs/pybind11/include/pybind11/pybind11.h:44,
                 from py_kmc_api/py_kmc_api.cpp:1:
/home/ug1102/.conda/envs/test/include/python3.12/pytypedefs.h:22:16: note: forward declaration of ‘PyFrameObject {aka struct _frame}’
 typedef struct _frame PyFrameObject;
                ^~~~~~
make: *** [makefile:111: py_kmc_api] Error 1
  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-01-17 14:45
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    根据你提供的错误信息,问题主要出现在编译过程中遇到的一些类型不匹配或函数已弃用的问题。具体来说,错误主要集中在py_kmc_api/py_kmc_api.cpp文件中。以下是解决这个问题的一些建议和步骤:

    解决方案

    1. 更新Python版本

      • 确保你的Python版本是最新的。当前的错误可能是因为PyFrameObject结构体在较新的Python版本中有所变化。
      conda install python=3.9
      
    2. 修改代码以兼容新版本的Python

      • 根据错误信息,PyFrameObject在新的Python版本中可能有变化,因此需要更新相关的代码。
      • 打开py_kmc_api/libs/pybind11/include/pybind11/cast.h文件,找到第442行附近的代码,检查PyFrameObject的使用情况,并确保它与当前的Python版本兼容。
    3. 检查并修复头文件包含顺序

      • 确保所有的头文件都正确地包含了必要的依赖项。有时,头文件的包含顺序会导致编译错误。
      • 检查py_kmc_api/py_kmc_api.cpp文件中的包含顺序,确保所有必需的头文件都在正确的顺序中被包含。
    4. 更新或替换pybind11

      • 如果上述方法无效,可以尝试更新或替换pybind11库。
      git submodule update --init --recursive
      
    5. 检查环境变量

      • 确保所有必要的环境变量都已正确设置。特别是PYTHONPATHLD_LIBRARY_PATH
      export PYTHONPATH=$PYTHONPATH:/path/to/your/python/modules
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/library
      
    6. 重新编译

      • 在完成上述更改后,重新运行make命令来编译项目。
      make
      

    示例代码修改

    假设我们需要修改py_kmc_api/libs/pybind11/include/pybind11/cast.h文件中的错误代码,我们可以尝试以下修改:

    // 原始代码
    std::__cxx11::string pybind11::detail::error_string() {
        // ...
        return "  " + handle(frame->f_code->co_filename).cast<std::string>() +
               ": " + std::to_string(frame->f_lineno);
    }
    
    // 修改后的代码
    std::__cxx11::string pybind11::detail::error_string() {
        // ...
        if (frame && frame->f_code && frame->f_code->co_filename) {
            return "  " + handle(frame->f_code->co_filename).cast<std::string>() +
                   ": " + std::to_string(frame->f_lineno);
        }
        return "";
    }
    

    请注意,这只是一个示例,实际的修改应根据具体的错误信息和代码情况进行调整。

    希望这些步骤能帮助你解决问题。如果还有其他疑问或需要进一步的帮助,请随时告诉我。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月17日