簡體   English   中英

對使用 CMake 生成為 lib .a 的方法的未定義引用

[英]undefined reference to method generated as lib .a with CMake

你能解釋一下為什么我的函數AllToAll在我的例子中沒有定義嗎? 我使用 CMake 生成一個由示例調用的 libNeuralNetwork.a。

圖層工廠.hpp

#pragma once
#include "LayerModel.hpp"
#include "Layer.hpp"

namespace nn
{
    extern internal::LayerModel AllToAll(int numberOfNeurons, activationFunction activation = sigmoid);
}

圖層工廠.cpp

#include "LayerFactory.hpp"
#include "AllToAll.hpp"

using namespace nn;
using namespace internal;

LayerModel AllToAll(int numberOfNeurons, activationFunction activation)
{
    LayerModel model
    {
        allToAll,
        activation,
        numberOfNeurons
    };
    return model;
}

神經網絡.hpp

#pragma once
#include "layer/LayerModel.hpp"
#include "layer/LayerFactory.hpp"

namespace nn
{
    class NeuralNetwork
    {
    public:
        NeuralNetwork(int numberOfInputs, std::vector<internal::LayerModel> models);
        //...
    };
}

例子.cpp

#include "../src/neural_network/NeuralNetwork.hpp"

using namespace nn;

int example1()
{
    NeuralNetwork neuralNetwork(3, {AllToAll(5), AllToAll(2)});
}

錯誤信息:

CMakeFiles/UnitTests.out.dir/ExamplesTest.cpp.o: In function `example1()':
ExamplesTest.cpp:(.text+0x8b3): undefined reference to `nn::AllToAll(int, nn::activationFunction)'

您已經在頂級命名空間中聲明了AllToAll ,並在nn命名空間中定義了它。

以下不會在命名空間中聲明函數:

using namespace foo;

extern void Bar();

你需要:

namespace foo {
  extern void Bar();
}

暫無
暫無

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

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