主要的多重定义

时间:2014-03-25 09:37:19

标签: c makefile shared-libraries automake

我正在尝试使用/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上的过程非常有效,那么如果我{MINGW} make他们就会显示错误消息multiple definition of main'`

即使他们有多个make,我怎样才能main()他们在MINGW上?

以下是autotools的配置文件。

[confiugre.ac]

AC_PREREQ([2.69])
AC_INIT([libmylib], [1], [admin@localhost])
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

[Makefile.am@src]

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

[Makefile.am@mylib]

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

1 个答案:

答案 0 :(得分:0)

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

(除了包含DllMain的Windows DLL,但这意味着不同的东西。)

如果要为库提供测试用例,可以将测试用例作为包含库的单独项目。测试代码不应该在库本身内部,也不应该在main()。

之内

另外,我非常怀疑你是否能够构建一个具有多个具有相同名称的函数定义的程序,无论是main()还是其他东西。如果您认为自己已经设法了,我会怀疑您没有正确链接文件,或者链接器是垃圾。