我正在一个非常大的C++项目中创建一个大的共享对象,我们在这里使用一个外部SDK,其中有几个头文件和几个共享库,它们都属于对方。这意味着SDK类的声明在头文件中,但它们的定义在共享对象中。将共享对象链接到其他共享对象C++项目
据我所知,由于头文件中的声明我可以编译这段代码。
但我不明白的是什么时候我必须明确指定链接器使用的共享对象?
即如果我指定它(例如,在与target_link_libraries命令cmake的),则链接器可以检查一个符号将在共享库或没有。但是如果我没有指定它会发生什么(即链接中没有任何-l [shared_object_name]标志)?我的经验是(令我感到惊讶的)是正常工作(即整个建筑过程已完成)。它怎么可能?
一些编译器,如Microsoft-VC有一个'#pragma',它允许你在源代码中指定编译器和链接器选项。 Boost使用它根据编译器宏自动选择正确的共享库。 – rodrigo
我们在linux下使用GCC,不使用#pragma :( –