Вы можете посмотреть waf book § 10.5.2 .
Я думаю, ваша проблема в том, что LD_LIBRARY_PATH определяет путь к libs для выполнения . Для связывания вы должны использовать свой компоновщик с флагом -L с правильным путем.
Для этого самый простой способ - использовать conf.env.LINKFLAGS = "-L/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/lib"
в соответствующем варианте конфигурации.
По way полезен для определения специальной c команды, связанной с вашим вариантом:
def configure(cnf):
cnf.setenv("linux_mips_uclibc_debug")
cnf.env.CC = /opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/bin/cc
cnf.env.LINKFLAGS = "-L/opt/toolchains/crosstools-mipsel-linux-uclibc-4.6.3/usr/lib"
cnf.env.foo = "whatever"
cnf.setenv("linux_xxx")
cnf.env.CC = /opt/toolchains/crosstools-xxx/usr/bin/cc
cnf.env.LINKFLAGS = "-L/opt/toolchains/crosstools-xxx/usr/lib"
cnf.env.foo = "whatever_xxx"
def build(bld):
bld.program(target = "myexe", source = "mymain.c")
class dummy_name_doesnt_matter(BuildContext):
cmd = 'build_linux_mips_uclibc_debug'
variant = 'linux_mips_uclibc_debug' # must match setenv name in conf
class dummy_name_doesnt_matter(BuildContext):
cmd = 'build_xxx'
variant = 'linux_xxx'
Используйте как:
waf # build default variant, with system toolchain
waf build_linux_mips_uclibc_debug # use linux mips variant
waf build_xxx # use variant linux_xxx
Примечание: непроверено, у меня нет waf 1.7.2
Если вам действительно нужно установить LD_LIBRARY_PATH
для компилятора, вы можете выполнить команду monkeypatch waf compile / link. Примерно так:
from waflib.Tools.c import c, cprogram
from waflib.Task import classes
llp = "LD_LIBRARY_PATH={} ".format("/your/path/here")
class MyC(c):
run_str = lld + c.run_str
class MyCProgram(cprogram):
run_str = lld + cprogram.run_str
classes['c'] = MyC
classes['cprogram'] = MyCProgram
Я сделал что-то подобное, чтобы заменить -I
на -isystem
. Работает как шарм :)
Конечно, вы можете сделать это в программе waf для простоты использования.