2014-03-25 70 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()還是別的。如果你相信你已經管理好了,我會懷疑你沒有正確鏈接文件,或者鏈接器是廢話。