В настоящее время я пишу небольшое тестовое приложение для изучения статического связывания библиотек и доступа к их символам во время выполнения с помощью Boost.DLL. Я компилирую очень простую статическую библиотеку и связываю ее с очень простым приложением, используя MinGW-w64, и делаю это с помощью Makefile и mingw32-make.
определяет класс A, который хранит и изменяет ссылку на int. Единственный модуль библиотеки B.cpp определяет подкласс A, называемый B, а также фабричный метод. Главный модуль определяет класс C, который хранит ссылку на экземпляр A и пытается получить доступ к символам, определенным в B.cpp, для хранения экземпляра B в C. Когда я пытаюсь запустить приложение, выходной файл успешно загружается, но программе не удается найти статически связанные символы.
A.hpp:
Код: Выделить всё
#pragma once
#ifndef A_HPP_
#define A_HPP_
#include
#include
#include
#include
#include
#include
class A {
protected:
int *_p;
public:
A(int *p = NULL);
virtual ~A() = default;
void setp(int *p);
int deref();
virtual void add();
};
#endif
B.cpp:
Код: Выделить всё
#include "A.hpp"
class B : public A {
public:
B();
~B();
void add();
};
const size_t B_SIZE = sizeof(B);
void B_get(void *addr) {
B *tmp = new B();
memcpy(addr, tmp, B_SIZE);
delete tmp;
}
B::B() {}
B::~B() {}
void B::add() {
if (_p != NULL)
*_p = *_p + 100;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/71517617/boost-dll-cannot-find-symbols-in-executable-using-statically-linked-library[/url]