简体   繁体   中英

Linking a lib file with a non-standard name in Qt

On Windows, I'm attempting to add an external DLL to my Qt project (via Qt Creator). I have the following generated artifacts I'm trying to reference:

  • target/debug/mylib.d
  • target/debug/mylib.dll
  • target/debug/mylib.dll.d
  • target/debug/mylib.dll.lib

Adding the library/dll generates the following entry in my .pro file:

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/target/release/ -lmylib.dll
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/target/debug/ -lmylib.dll

INCLUDEPATH += $$PWD/target/debug
DEPENDPATH += $$PWD/target/debug

Qt is expecting "mylib.dll.lib" to be named "mylib.lib", so with the above configuration the build fails with the error:

error: LNK1104: cannot open file 'mylib.lib'

The build works correctly if I rename "mylib.dll.lib" to "mylib.lib", but I'd rather not introduce this extra step, if possible. The dll.lib suffix is generated by Rust/Cargo, and there aren't any plans to allow this to be configured .

After doing some research, I've tried a couple of different options, including referencing it in PRE_TARGETDEPS , but I can't make the LNK1104 error disappear. What am I missing?

I figured it out. The trick is to refer to the files directly (ie not using the -L / -l parameters), like this:

win32:CONFIG(release, debug|release): LIBS += $$PWD/target/release/mylib.dll.lib
else:win32:CONFIG(debug, debug|release): LIBS += $$PWD/target/debug/mylib.dll.lib

win32:CONFIG(release, debug|release): LIBS += $$PWD/target/release/mylib.dll
else:win32:CONFIG(debug, debug|release): LIBS += $$PWD/target/debug/mylib.dll

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM