2014-03-25 38 views
-1

我正在尝试创建。 /configure + make通过使用autotools设置为在以下结构中构建C代码。 drive.c使用功能mylib.c主要的多重定义

[mylib] 
+mylib.c 
+mylib.h 
[src] 
+drive.c 

更多细节在这里。

[mylib.c]

#include <stdio.h> 
#include "mylib.h" 

int main(){ 
    mylib(); 
    return 0; 
} 
void 
mylib(void) 
{ 
    printf ("Hello world! I AM mylib \n"); 
} 

[mylib.h]

void mylib(void); 

[drive.c]

#include <mylib.h> 

int 
main (int argc, char **argv) 
{ 
    mylib(); 
    return 0; 
} 

其实我已经给main()mylib.cdrive.c

如果我make他们在CentOS过程noremally但完成如果我make他们MINGW错误消息multiple definition of main'`显示

我怎么能make他们MINGW即使他们已经多次有main()

以下是自动工具的配置文件。

[confiugre.ac]

AC_PREREQ([2.69]) 
AC_INIT([libmylib], [1], [[email protected]]) 
AC_CONFIG_SRCDIR([mylib/mylib.c]) 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_MACRO_DIR([m4]) 
AM_INIT_AUTOMAKE([foreign]) 
LT_INIT 
AC_PROG_CC 
AC_CONFIG_FILES([mylib/Makefile 
       src/Makefile 
       Makefile]) 
AC_OUTPUT 

[Makefile.am]

SUBDIRS = mylib src 
ACLOCAL_AMFLAGS = -I m4 

[[email protected]]

bin_PROGRAMS = drive 
drive_SOURCES = drive.c 
LDADD = ../mylib/libmylib.la 
AM_CPPFLAGS = -I../mylib 

[[email protected]]

lib_LTLIBRARIES = libmylib.la 
libmylib_la_SOURCES = mylib.c 
include_HEADERS = mylib.h 
+5

有多个main()没有任何意义。你想通过多重解决问题来解决什么问题? – Lundin

+0

如果有一些C代码可能是我制作的或某人制作的共享库。在第一个我从原始文件复制它,然后编辑它的源删除主要避免多个主。 我想我可以简化这个过程,如果我可以编译多个main()。 还想到调试场景,对于某种类型的库来说很容易进行微小的测试。如果它具有main(),我可以将它编译为可执行文件进行小测试。经过测试,我可以将它编译为共享库。 – user1345414

+0

如果我不能在CentOS上编译,我没有问过这个问题,我会放弃这个想法。但是我已经能够在CentOS上的多个主内编译。为什么我想知道如何在MINGW上编译相同的方式。 – user1345414

回答

0

你混淆了事物,拥有多个main()的想法是根本错误的。库永远不会包含main()函数。

(与其它具有的DllMain,但是这意味着不同的东西的Windows DLL的除外)。

如果您想为您的图书馆提供一个测试用例,你让测试用例作为单独项目其中包括图书馆。测试代码不应该在库本身内,main()也不应该。

另外,我非常怀疑你能够构建一个程序,它具有几个具有相同名称的函数定义,无论是main()还是别的。如果你相信你已经管理好了,我会怀疑你没有正确链接文件,或者链接器是废话。