【问题标题】:Linker error when building an application with meschach library使用 meschach 库构建应用程序时出现链接器错误
【发布时间】:2012-12-13 12:56:46
【问题描述】:

当我尝试构建我的应用程序时,我收到链接器错误undefined reference to (..)。所有未找到的函数都是从 meschach 库中导入的。我认为库已正确安装:

whereis libmeschach
libmeschach: /lib/libmeschach.so /usr/lib/libmeschach.so /lib64/libmeschach.so

我的 SCons 文件:

import os
import sys
import functools

PROJECT_ROOT = os.path.curdir
doc_path = functools.partial(os.path.join, PROJECT_ROOT, 'doc')
src_path = functools.partial(os.path.join, PROJECT_ROOT, 'src')
out_path = functools.partial(os.path.join, PROJECT_ROOT, 'build')

cpp_flags = {
    'linux2' : '-Wall -Wextra -pedantic -fopenmp -O3',
    'win32'  : '/w /MD /openmp'
}

env = Environment(ENV=os.environ,CPPFLAGS=cpp_flags[sys.platform])    
env.VariantDir(variant_dir=out_path(),src_dir=src_path())

env.Program(target=out_path('cholesky'), source=Glob(out_path('*.cpp')), LIBS=['m'])

我使用 Arch Linux 64 位。

编辑:我用 Makefile 替换了 SCons,但错误仍然存​​在:

CC=g++
CFLAGS=-c -Wall -Wextra -pedantic -I./externals/include
LIB=./externals/lib/meschach.a -lm

all: cholesky

cholesky: cholesky.o equation.o testing.o profiler.o parallelCholeskyTest.o matrix.o
$(CC) cholesky.o equation.o testing.o profiler.o parallelCholeskyTest.o matrix.o -o 
    main $(LIB)

 cholesky.o:
$(CC) $(CFLAGS) src/cholesky.cpp

 equation.o: matrix.o
$(CC) $(CFLAGS) src/equation.cpp

 matrix.o:
$(CC) $(CFLAGS) src/matrix.cpp

 testing.o:
$(CC) $(CFLAGS) src/testing.cpp

 profiler.o:
$(CC) $(CFLAGS) src/profiler.cpp

 parallelCholeskyTest.o:
$(CC) $(CFLAGS) src/parallelCholeskyTest.cpp

【问题讨论】:

  • 尝试将libmeschach 添加到库列表中,即尝试将LIBS=['m'] 更改为LIBS=['m', 'meschach']。有关链接的更多信息,请查看this link
  • 不幸的是它没有帮助。
  • 嗯,当实际编译发生时,您是否看到正在链接的库或任何东西?你能检查一下你得到这个错误的确切的gcc编译命令吗?
  • 嗯,你能编译使用这个库的简单代码吗? (你也绝对可以改进你的makefile ...我知道这不是问题&你可能是第一次使用它们:))
  • 很高兴为您提供帮助!很好,你可以解决问题:)

标签: c gcc linker-errors scons meschach


【解决方案1】:

好的。我解决了。此库不能作为 C++ 库包含,您必须将每个 #include 包装为 extern "C" { }。在这里您可以找到有关此问题的更多信息:C-library not linking using gcc/g++

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多