簡體   English   中英

CMake“OBJECT”庫:clang沒有正確鏈接

[英]CMake “OBJECT” library: clang not linking properly

我有一個共享庫(目前正在編譯,加載和運行) mylib.so 從這個庫中,我想使用一個新函數(在另一個外部庫中注冊)。 簽名是bool my_function(const QVariant *, PyObject **)

這個新函數在一個單獨的.cpp文件中定義,該文件被編譯為一個對象,然后鏈接到mylib.so

所以我用我的自定義函數創建了一個新的OBJECT

ADD_LIBRARY(helper_lib OBJECT helper_lib.cpp)

在構建我的庫時包括這個

ADD_LIBRARY(mylib SHARED source.cpp $<TARGET_OBJECTS:helper_lib>)

它失敗了“對'my_function'的未定義引用”

我知道

  • 生成helper_lib.o文件
  • nm helper_lib.o顯示

    0000000000000000 T _Z11my_functionPK8QVariantPP7_object

  • nm mylib.o顯示

    U my_function

  • helper_lib.o傳遞給clang ++:

    clang++ -fPIC [...] -o my_lib.so mylib.o helper_lib.o [...]

我很難看出錯誤發生在哪里。 我可以想象mylib.o中有一些錯誤,它顯示了一個無符號的符號名稱,它不能與helper_lib.o符號名稱匹配,但我也可能完全在錯誤的軌道上。


helper_lib.h

void my_function();

helper_lib.cpp

#include "helper_lib.h"

void my_function()
{
  return;
}

source.cpp更復雜,因為它主要包含由sip自動生成的代碼。

它適用於簡單的source.cpp。 因此,必須在包含期間弄亂某些東西,您可以嘗試將#include "helper_lib.h移動到source.cpp的頂部。

要驗證這與您的工具鏈無關,您可以從干凈的構建目錄中嘗試以下項目:

的CMakeLists.txt:

cmake_minimum_required(VERSION 3.3)
project(dummy)
ADD_LIBRARY(helper_lib OBJECT helper_lib.cpp)
ADD_LIBRARY(mylib SHARED source.cpp $<TARGET_OBJECTS:helper_lib>)

source.cpp:

#include "helper_lib.h"
void dummy() {
    my_function();
}

helper_lib.h:

#pragma once
void my_function();

helper_lib.cpp:

#include "helper_lib.h"
void my_function() {
}

一些文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM