我下载了FMUSDK,我想编译代码。不幸的是,构建脚本应该与Visual Studio C编译器一起使用,但我无法在我的机器上安装/使用它。因此,我尝试修改脚本(以及代码的某些部分)以便能够使用GCC编译它。但我对编译复杂代码完全不熟悉(我通常只使用gcc * .c -o outfile.exe)
这是我的问题: 在某些文件中有一个与
链接的库 #pragma comment(lib, "libxml2.lib")
这不适用于GCC。
可以在..\shared\parser\libxml2.lib
找到lib
包含..\shared\parser\libxml\
我用
调用构建脚本fmusdk\fmu20\src\co_simulation>..\build_fmusim_cs_gcc.bat
然后脚本如下所示:
set SRC=main.c ..\shared\sim_support.c ..\shared\xmlVersionParser.c ..\shared\parser\XmlParser.cpp ..\shared\parser\XmlElement.cpp ..\shared\parser\XmlParserCApi.cpp
set INC=-I ..\shared\include -I ..\shared -I ..\shared\parser\libxml -I ..\shared\parser
set LIB=-L ..\shared\include -L ..\shared -L ..\shared\parser\libxml -L ..\shared\parser
set OPTIONS=-D FMI_COSIMULATION -D STANDALONE_XML_PARSER -D LIBXML_STATIC -v
g++ %INC% %OPTIONS% %SRC% %LIB% -lxml2 -o fmu20sim_cs.exe
但是我收到以下错误消息:
c:/users/<username>/userprograms/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lxml2
我尝试使用我在http://www.rapidtables.com/code/linux/gcc/gcc-l.htm上找到的内容,但我似乎没有工作。
有人可以帮忙吗?我究竟做错了什么?在INC和LIB下,我把所有看起来都很有帮助的东西,但我不知道我在那里做了什么......
我还有一个日志文件,其中包含批处理文件的详细输出。但我不知道如何上传它:(
祝你好运, 马丁
答案 0 :(得分:2)
您应该-lxml2
替换-llibxml2
。
解释,来自Mingw:
另请注意,库名
"lib<name>.a"
和"lib<name>.lib"
不相同;如果您有一个根据异常"lib<name>.lib"
约定命名的库,"-l<name>"
规范将无法找到它 - 如果您无法重命名该库,则必须使用"-llib<name>"
形式代替
答案 1 :(得分:2)
libxml2.lib
是(经常)弄乱库名称约定的例子。 Visual Studio使用添加.lib
扩展名的约定(这将是xml2.lib
),GCC使用向库名添加lib
前缀和.a
扩展名的约定(这将是libxml2.a
)。
根据GCC手册(https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Link-Options.html#Link-Options),您有两种选择:
libxml2.a
,因为这是GCC在给定-lxml2
选项时要查找的文件名。
链接器搜索库的标准目录列表,该列表实际上是名为lib library .a的文件。
-l
(例如,在g ++命令行中将-lxml2
更改为libxml2.lib
),然后GCC将完全查找给定名称。
不以特殊识别后缀结尾的文件名被视为命名对象文件或库。 (链接器根据文件内容将目标文件与库区分开来。)如果完成链接,这些目标文件将用作链接器的输入。