c ++程序(.cpp)如何与header(.h)和libtool(.la)一起使用?

问题描述 投票:0回答:1

我已经在Linux中创建了一个名为helloworld的文件夹。在此文件夹内有子目录:

  • 包括
  • lib
  • src

include /在此目录中,我创建了一个名为helloworld.h的头文件。内容是:

class helloworld{
public:

       void getvalue();

};

lib /在lib目录中,我创建了一个名为helloworld.cpp的cpp文件。内容主要是功能:

#include<iostream>
#include<helloworld.h>
using namespace std;

void helloworld::getvalue() {

}

src /在src目录中,我创建了一个名为main.cpp的主cpp文件。内容主要:

#include<iostream>
#include<helloworld.h>

int main()
{
helloworld a;
a.getvalue();
}

但是在我执行autoconf,automake,。/ configure以及它有一个错误:

helloworld/src/main.cpp:8: undefined reference to `helloworld::getvalue()'

我只想在main.cpp中使用helloworld.cpp的函数。我花了很多时间进行搜索并尝试并出错。请帮忙。

添加了Makefiles.am

在父目录中,我有两个文件Makefile.am和configure.ac:

Makefile.am

AUTOMAKE_OPTIONS = foreign
SUBDIRS=src lib

configure.ac

AC_INIT([helloworld], [0.1], [[email protected]])
AM_INIT_AUTOMAKE
AC_PROG_RANLIB
AC_LANG(C++)
AC_PROG_CC
AC_PROG_CXX
AC_CONFIG_MACRO_DIR([m4])
AC_PROG_LIBTOOL
AC_DISABLE_STATIC
AC_CONFIG_FILES([Makefile lib/Makefile src/Makefile])
AC_SUBST([CC])
LT_INIT
AC_OUTPUT

在lib目录中有一个Makefile.am

INCDIR=../include
INCPATH=-I. -I$(INCDIR)
AM_CPPFLAGS=$(INCPATH)
lib_LTLIBRARIES=libhelloworld.la
libhelloworld_la_SOURCES=helloworld.cpp

在src目录中有一个Makefile.am

INCDIR=../include
INCPATH=-I. -I$(INCDIR)
AM_CPPFLAGS=$(INCPATH)
helloworld_LDADD=-L/lib/libhelloworld.la
bin_PROGRAMS=helloworld
helloworld_SOURCES=main.cpp

如果我删除了a.getvalue();

c++ linux automake libtool
1个回答
0
投票
helloworld_LDADD=-L/lib/libhelloworld.la


/lib/libhelloworld.la  

此搜索库来自根目录,而不是您的项目lib /目录

尝试

./lib/libhelloworld.la

../lib/libhelloworld.la

lib/libhelloworld.la
© www.soinside.com 2019 - 2024. All rights reserved.