如何链接.lib文件而不将它们放入编译器库文件夹?

时间:2009-05-20 15:43:12

标签: c++ linker

我的代码中是否有一种方法可以链接到我需要的库文件,这样我就不必设置我使用的每个编译器了?

我希望能够使用Visual C ++。net 2005,G ++等。我正在尝试制作一个跨平台的游戏引擎,但有些平台使用自定义编译器,我想让我的引擎尽可能多样化。

5 个答案:

答案 0 :(得分:2)

有一个名为mpc的工具可以从同一个mpc DSL创建makefile和VC项目。如果您要使用该工具,您将在pmc文件中指定链接依赖项(库)一次,它将为Visual Studio生成包含有关如何链接库的必要信息的g ++和项目文件的makefile。

来自mpc主页:

  

支持多个版本的make(GNU,Microsoft,Borland,Automake),Visual C ++ 6.0和Visual Studio 2003,2005和2008。

答案 1 :(得分:1)

我不完全理解您的问题,确定有一种方法可以通过-L dir选项在UNIX中指定库 对于Visual C ++,似乎可以使用/ LIBPATH来覆盖环境库路径。

我怀疑你是否想在你的代码中执行它,因为库路径通常与头文件不是静态相同的。

您可能希望创建一个自定义生成文件,为您正在使用的不同平台和工具设置正确的编译器选项和路径。似乎这是建议的mpc工具试图完成的。

答案 2 :(得分:0)

Qt的qmake听起来与mpc类似。您可以在.pro文件中定义项目和参数,然后qmake创建一个Makefile或Visual Studio项目文件。

这是跨平台开发的难点之一,但好消息是所需的库列表通常不会经常改变。

答案 3 :(得分:0)

我知道Visual C ++有#pragma注释行。不确定其他人是否这样做。

#pragma comment(lib, "SomeLib.lib")

你可能想要看的是像Scons。 http://www.scons.org/wiki/FrequentlyAskedQuestions#head-00ce208eece451fe9879c6f8dd1c45b56f4c76d1

答案 4 :(得分:0)

我认为这会对你有所帮助:

#ifdef _DEBUG
#   pragma comment( lib, "dir1/dir2/mylibd.lib" )
#else
#   pragma comment( lib, "dir1/dir2/mylib.lib" )
#endif

编辑:可能g ++不支持通过代码链接。丹尼尔建议使用makefile,这将是一个不错的选择。