我正在开发一个Math应用程序,可以通过编写python脚本来扩展它.
我使用Qt 4.6.3(构建为静态库,调试和发布版本)和Boost 1.43.0(构建为静态库,运行时链接也设置为静态,多线程版本,调试和发布).一切都是用MSVC++ 2008构建的.Boost构建了以下库:
我的项目编译,但在链接阶段给出以下错误:
1>Linking...
1>LINK : fatal error LNK1104: cannot open file 'boost_python-vc90-mt-gd-1_43.lib'
Run Code Online (Sandbox Code Playgroud)
为什么不选择我编译的库之一?
我认为库名中的s代表静态,但是自动链接功能似乎选择了一个动态库,我希望它在一个可执行文件中静态链接.
regex库也是如此:我编译了相同的4个正则表达式库并且快速测试显示了这个链接错误:
1>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc90-mt-gd-1_43.lib'
Run Code Online (Sandbox Code Playgroud)
该怎么办?
我需要使用链接的静态库构建我的C++ Builder XE项目,这样我就可以在Project的Debug\Win32目录中获得一个大的可执行文件,但我不能.
每次我尝试构建我的项目时,它都不会使用运行时库构建可执行文件,而我已将Project的选项设置为禁用"使用动态RTL链接"并启用"使用运行时包构建",如下所示:

这里出了什么问题?任何的想法?
非常感谢提前.
GHC 7.8现在默认动态链接.FAQ说这要求GHC也加载动态对象而不是静态对象.现在我的问题是:为什么会这样?为什么GHC不能继续加载静态对象,为什么GHC本身如何联系起来呢?
我有一个Go库,它为C++ OpenImageIO库(OpenImageiGO)提供绑定.我一直很乐意通过标准动态链接到libOpenImageIO来构建我的绑定,但现在我正试图静态链接.我遇到了一个问题,无论我尝试哪种标志组合,外部链接器都会因大量"未定义的引用"错误而失败.我似乎记得在过去提到过这个问题,并说链接器看到符号的顺序存在问题.但我似乎无法再找到这些信息.
这是我最近的构建尝试的一个简短示例,试图将其与boost,OpenColorIO和OpenImageIO的静态构建链接:
$ export CGO_CPPFLAGS="\
-I/path/to/boost/include \
-I/path/to/OpenColorIO/include \
-I/path/to/OpenImageIO/include"
$ export CGO_LDFLAGS="\
-L/path/to/boost/lib -lboost_thread_static -lboost_system_static \
-L/path/to/OpenColorIO/lib -lopencolorio \
-L/path/to/OpenImageIO/lib -lOpenImageIO"
$ go build -v -x --ldflags '-extldflags "-static"' github.com/justinfx/openimageigo
...
CGO_LDFLAGS="/path/to/boost/lib/libboost_system_static.a" "/path/to/boost/lib/libboost_thread_static.a" "/path/to/OpenColorIO/lib/libopencolorio.a" "/path/to/OpenImageIO/lib/libOpenImageIO.a" "-lstdc++" /vol/apps/go/1.3.0/pkg/tool/linux_amd64/cgo -objdir $WORK/github.com/justinfx/openimageigo/_obj/ -- -I/path/to/boost/include -I/path/to/OpenColorIO/include -I/path/to/OpenImageIO/include -I./cpp -I $WORK/github.com/justinfx/openimageigo/_obj/ -I/path/to/boost/include -I/path/to/OpenColorIO/include -I/path/to/OpenImageIO/include color.go imagebuf.go imagebufalgo.go imagecache.go imageinput.go imageoutput.go imagespec.go oiio.go roi.go
...
/usr/bin/g++ -I . -fPIC -m64 -pthread -fmessage-length=0 -I/path/to/boost/include -I/path/to/OpenColorIO/include -I/path/to/OpenImageIO/include -I./cpp -I $WORK/github.com/justinfx/openimageigo/_obj/ -g -O2 -o …Run Code Online (Sandbox Code Playgroud) 我libvec.a从 simpleaddv.o和multo.o. 目标文件addv.o包含 1 个函数符号 ( addvec) 并multo.o包含 1 个函数 ( multvec)。我还编写了一个简单的程序来测试它(driver.c它添加了 2 个向量并使用addvec了库中的函数;它还包含vector.h了定义函数原型的程序)。然后我编译它
gcc -static driver.o ./libvec.a
Run Code Online (Sandbox Code Playgroud)
一切顺利。但起初我试图用
gcc -static ./libvec.a driver.o
Run Code Online (Sandbox Code Playgroud)
我得到了一个错误:
undefined reference to 'addvec'
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我首先指定库时会出错?订购应该重要吗?
问题:
链接静态库时生成的固件映像与链接直接从静态库中提取的对象时生成的固件映像不同.
两个固件映像都没有错误地链接并成功加载到微控制器上.
后一个二进制文件(与对象链接)成功执行并按预期执行,而前者(链接到静态库)则不然.
编译期间唯一的警告是unused-but-set-variable在制造商提供的HAL中,由于编译实现不需要各种宏定义; 并且unused-parameter在各种弱功能中,也在制造商提供的HAL内.
描述:
我正在为STM32F407开发一个嵌入式应用程序.到目前为止,我一直在使用一个代码库,包括微处理器的HAL和设置代码,特定外设的驱动程序以及利用前两者的应用程序.
由于我希望使用相同的驱动程序和HAL开发多个应用程序(两者都是完整的和经过测试的,因此不会经常更改),我希望编译和分发HAL和驱动程序作为静态库,然后可以将其与申请来源.
问题是当链接应用程序和静态库时,固件映像无法在微处理器上正确执行.链接应用程序和直接从静态库中提取的目标文件时,固件映像按预期执行.
特别:
使用以下方法链接静态库时,创建的二进制文件不起作用:
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(APPOBJECTS) Library/libtest.a
Run Code Online (Sandbox Code Playgroud)
使用以下方法链接从静态库中提取的对象时创建的二进制文件
@cd Library && $(AR) x libtest.a && cd ..
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(APPOBJECTS) Library/*.o
Run Code Online (Sandbox Code Playgroud)
在这两种情况下:
CFLAGS = $(INCLUDES) $(DEFS) -ggdb3 -O0 -std=c99 -Wall -specs=nano.specs -nodefaultlibs
CFLAGS+= -fdata-sections -ffunction-sections -mcpu=cortex-m4 -march=armv7e-m -mthumb
CFLAGS+= -mfloat-abi=hard -mfpu=fpv4-sp-d16 -MD -MP -MF $@.d
LDFLAGS = -T$(LDSCRIPT) -Wl,-static -Wl,-Map=$(@:.elf=.map),--cref -Wl,--gc-sections
Run Code Online (Sandbox Code Playgroud)
我已经比较了输出-Wl,--print-gc-sections以及app.map文件,但是在两个版本之间有足够的不同,没有任何东西跳出来是错误的.我也试过没有-Wl,--gc-sections,无济于事.
arm-none-eabi-size两个固件映像的输出是:
text …Run Code Online (Sandbox Code Playgroud) 在头文件中,我想#pragma comment lib根据包含头文件和正在构建的项目是 dll 还是 staticLib 项目来选择正确的 lib 文件。
是否有任何预定义的预处理器变量我可以 #if 来解决它?
我已经看到_DLL可以用来查看这里使用的是静态还是动态 CRT:https : //msdn.microsoft.com/en-us/library/b0084kay.aspx?f=255&MSPPError=-2147217396
我通过将一堆代码与C ++上的Linux上的静态库(.a)链接来构建共享库。我有一个在静态库中定义的方法。当我使用nm -C打印该静态库中的符号时,它显示为:
Alembic::AbcCoreFactory::v9::IFactory::getArchive(std::string const&, Alembic::AbcCoreFactory::v9::IFactory::CoreType&)
Run Code Online (Sandbox Code Playgroud)
该符号未在输出.so文件(我正在构建的库)中定义,但是当我使用nm -uC列出未定义的符号时,它将输出:
Alembic::AbcCoreFactory::v9::IFactory::getArchive(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Alembic::AbcCoreFactory::v9::IFactory::CoreType&)
Run Code Online (Sandbox Code Playgroud)
区别在于,第一个使用std :: string const&,第二个使用std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&
我试图了解为什么找不到符号。两者本质上是相同的,所以不应该匹配吗?
就上下文而言,我正在尝试为Linux虚幻编辑器4附带一个Alembic Importer。我尝试链接的库是Alembic库。
我正在尝试编译不使用动态加载器的可执行文件(ELF文件)。我曾经Cython将Python编译为C:
cython3 -3 test.py --embed
Run Code Online (Sandbox Code Playgroud)
然后
gcc test.c -otest $(pkg-config --libs --cflags python3)
Run Code Online (Sandbox Code Playgroud)
编译C生成的文件。
现在,我想test.c在静态可执行文件中进行编译。通常我使用-staticflag,但是在这里return collect2: error: ld returned 1 exit status。
我能怎么做?
编辑1: 不是完整的消息,因为正文限制为30000个字符
一长串如下警告和错误:
...
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x430): undefined reference to `XML_SetStartCdataSectionHandler'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x458): undefined reference to `XML_SetEndCdataSectionHandler'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x480): undefined reference to `XML_SetDefaultHandler'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x4a8): undefined reference to `XML_SetDefaultHandlerExpand'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x4d0): undefined reference to `XML_SetNotStandaloneHandler'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x4f8): undefined reference to `XML_SetExternalEntityRefHandler'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x520): undefined reference to `XML_SetStartDoctypeDeclHandler'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x548): undefined reference to `XML_SetEndDoctypeDeclHandler'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libpython3.5m.a(pyexpat.o):(.data+0x570): undefined reference to `XML_SetEntityDeclHandler' …Run Code Online (Sandbox Code Playgroud)