У меня проблема с компиляцией в C с использованием сторонних библиотек с "Scons" - PullRequest
0 голосов
/ 11 марта 2019

Я создаю программу на C, и мне понадобятся некоторые термодинамические свойства для воды и пара. Я искал онлайн и нашел эту библиотеку: http://freesteam.sourceforge.net

На своем сайте они советуют компилировать, используя то, что называется "scons". для этого у меня должен быть файл SConstruct со следующим кодом

# simple SCons script to build the example(s)

env = Environment()
import sys

import platform
if platform.system() == "Windows":
    # windows has problems, so we help it along a bit...
    cmd = [sys.executable,r'..\freesteam-config']
else:
    # on other platforms, it just works...
    cmd = ['freesteam-config']

env.ParseConfig(cmd + ['--libs','--cppflags'])

env.Program('test1',['test1.c'])

и запустите строку $ scons в командной строке.

Моя большая проблема в том, что когда я запускаю простой код, эта часть кода не работает должным образом:

    #include <freesteam/steam_ps.h>
    #include <freesteam/steam_pT.h>
    #include <freesteam/region4.h>
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>

    t = d - (a-d)/(1 + pow((p[0]/c),b)); 

Я только что опубликовал библиотеки и строку, которая, кажется, не работает, так как остальное - просто printfs и scanfs. Все эти переменные являются двойными.

и тогда я получаю эту ошибку

ubuntu@ubuntu:~/Documents/test folder$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o test1 test1.o -L/usr/local/lib -lfreesteam
/usr/bin/ld: test1.o: undefined reference to symbol 'pow@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
scons: *** [test1] Error 1
scons: building terminated because of errors.

Если кто-нибудь может мне помочь с этим, я был бы благодарен. Я не совсем уверен, но я думаю, что это может быть pow() функция. Хотя я пытался поставить что-то вроде pow(2,2), и он отлично работает.

1 Ответ

0 голосов
/ 11 марта 2019

все используемые библиотеки должны быть перечислены в команде компоновщика.

эта строка:

gcc -o test1 test1.o -L/usr/local/lib -lfreesteam 

отсутствует -lm в конце

Предложить:

gcc -o test1 test1.o -L/usr/local/lib -lfreesteam -lm
...