我正在尝试使用Boost的单元测试框架构建单元测试.我想动态地将测试套件库与Boost提供的自动生成的测试模块链接起来.这是我一直在使用的基本结构:
test_main.cpp:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
Run Code Online (Sandbox Code Playgroud)
lib_case.cpp:
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE( test_lib )
BOOST_AUTO_TEST_CASE( test_lib_case ) {
BOOST_ASSERT(true);
}
BOOST_AUTO_TEST_SUITE_END()
Run Code Online (Sandbox Code Playgroud)
Makefile文件:
all: unittest unittest2 unittest3
lib_case.o: lib_case.cpp
g++ -g -c -Wall -fPIC lib_case.cpp -o lib_case.o
libcase.so: lib_case.o
g++ -shared -Wl,-soname,libcase.so -o libcase.so lib_case.o
unittest: libcase.so
g++ -o unittest test_main.cpp -L. -lcase -lboost_unit_test_framework
unittest2: test_main.cpp lib_case.cpp
g++ -o unittest2 test_main.cpp lib_case.cpp -lboost_unit_test_framework
unittest3: lib_case.o
g++ -o unittest3 test_main.cpp lib_case.o -lboost_unit_test_framework
Run Code Online (Sandbox Code Playgroud)
在Ubuntu 14.04上进行测试,所有可执行文件都可以编译和链接而不会出错.
'unittest'无法执行'test_lib'套件声称安装失败,但'unittest2'和'unittest3'成功:
$./unittest
Test setup error: test …Run Code Online (Sandbox Code Playgroud) c++ ubuntu singleton dynamic-linking boost-unit-test-framework
我有一组应用程序插件,它们都链接到一个公共基础库。基础库定义了一个单例,它维护每个插件中所有对象构造函数的列表。
在 Windows 上,我可以将这个基础库创建为静态库,因此每个插件中都会放置一个单例副本。但是在 Linux 上,我和这个家伙有一些相反的问题。
到目前为止,我已经尝试了以下方法:
我真的很想通过将单例定义驻留在每个插件的基础库中以使其拥有自己的实例来保持程序结构与现在相同。我已经尝试将定义移动到每个插件中,但我真的很想避免这种情况。基本上我想重现他认为的错误。然而,他在一个头文件中完全定义了他的单例,这对我来说很有意义,每个插件都有自己的类实例,另一方面,我将单例的定义编译到基本库中。